33. Search in Rotated Sorted Array

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

问题: 给定一个已排序的数组,该数组以某一个元素作为支点做了旋转,在改旋转后数组中搜索值。

已排序数组的搜索,自然会想到二分搜索。将旋转到后面的部分用负数表示下标,便可以正常使用二分搜索。

需要注意的是对比元素值 和 目标值时,记得将 下标转会正数 ( i + len ) % len 。

=================================

81. Search in Rotated Sorted Array II

Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

问题: 若 Search in Rotated Sorted Array 中的数组存在重复元素,如何解决原问题?

重复元素对于上面算法唯一一个影响,就是算法实现时候,判断是否有旋转需要更严谨一点。

第一题代码:

     int search(vector<int>& nums, int target) {

         int len = (int)nums.size();

         if (len == ){
return -;
} if ( len == ){
return (nums[] == target) ? : -;
} int realL;
int realR;
if (nums[] > nums[len-]) {
for ( int i = ; i < len ; i++){
if (nums[i] > nums[i+]){
realR = i;
break;
}
} realL = realR - len + ;
}else{
realL = ;
realR = len - ;
} while( realL < realR ){ if (realL + == realR){
int idxL = ( realL + len ) % len;
int idxR = ( realR + len ) % len; if (nums[idxL] == target){
return idxL;
} if (nums[idxR] == target){
return idxR;
} return -;
} int mid = ( realL + realR ) / ;
int idx = ( mid + len ) % len; if (nums[idx] == target){
return idx;
} if (nums[idx] < target){
realL = mid;
}else{
realR = mid;
}
} // Actually, program will never step to here. It will return value previously.
return -;
}

第二题代码:

    bool search(vector<int>& nums, int target) {

        int len = (int)nums.size();

        if (len == ){
return false;
} if ( len == ){
return (nums[] == target) ? : ;
} int realL;
int realR; int ii = ;
while (ii < len - ) {
if (nums[ii] <= nums[ii + ]) {
ii++;
continue;
}else{
break;
}
} if (ii == len - ) {
realL = ;
realR = len - ;
}else{
realR = ii;
realL = realR - len + ;
} while( realL < realR ){ if (realL + == realR){
int idxL = ( realL + len ) % len;
int idxR = ( realR + len ) % len; if (nums[idxL] == target){
return true;
} if (nums[idxR] == target){
return true;
}
return false;
} int mid = ( realL + realR ) / ;
int idx = ( mid + len ) % len; if (nums[idx] == target){
return true;
} if (nums[idx] < target){
realL = mid;
}else{
realR = mid;
}
} // Actually, program will never step to here. It will return value previously.
return -;
}

[LeetCode] Search in Rotated Sorted Array I (33) && II (81) 解题思路的更多相关文章

  1. LeetCode:Search in Rotated Sorted Array I II

    LeetCode:Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to y ...

  2. LeetCode: Search in Rotated Sorted Array II 解题报告

    Search in Rotated Sorted Array II Follow up for "LeetCode: Search in Rotated Sorted Array 解题报告& ...

  3. 33.[LeetCode] Search in Rotated Sorted Array

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  4. [LeetCode] Search in Rotated Sorted Array 在旋转有序数组中搜索

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  5. [LeetCode] Search in Rotated Sorted Array II 在旋转有序数组中搜索之二

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  6. LeetCode——Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  7. [leetcode]Search in Rotated Sorted Array II @ Python

    原题地址:https://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/ 题意: Follow up for "Sea ...

  8. LeetCode: Search in Rotated Sorted Array 解题报告

    Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...

  9. LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找

    Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...

随机推荐

  1. 微信公众平台java开发具体解释(project代码+解析)

    说明: 本次的教程主要是对微信公众平台开发人员模式的解说,网络上非常多类似文章,但非常多都让初学微信开发的人一头雾水,所以总结自己的微信开发经验,将微信开发的整个过程系统的列出,并对主要代码进行解说分 ...

  2. Android开发之扫描附近wifi热点并列表显示

    近期项目中用到了wifi模块.今天做一个简单的总结. 參考:http://www.2cto.com/kf/201310/253617.html 1.如何获取wifi对象并进行操作 要操作WIFI设备, ...

  3. (转) [教程] Unity3D中角色的动画脚本的编写(一)

    ps: 这两天研究unity3d,对动画处理特别迷糊,不知FBX导入以后,接下来应该怎么操作,看到这篇文章,感觉非常好,讲解的很详细. 已有好些天没写什么了,今天想起来该写点东西了.这次我所介绍的内容 ...

  4. Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

    遇着这个提示的话,如果本地只安装了一个mysql,这里写的很详细的 http://www.blogjava.net/asenyifei/articles/82575.html 看这里可以解决,如果本地 ...

  5. MultiWii MWC的软件和调试方法

    (如果你的电脑是win7 64位的系统,安装了JAVA虚拟机后GUI仍然运行不了,那你就需要到C:\Program Files\Java\jre7\bin\找到并复制javaw.exe,然后粘贴到C: ...

  6. 简单竖向Tab选项卡

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. HDU_2068_RPG错排

    Problem Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R ...

  8. iOS判断当前控制器是否正在显示

    +(BOOL)isCurrentViewControllerVisible:(UIViewController *)viewController { return (viewController.is ...

  9. PHP 杂项 函数

    安装 杂项函数是 PHP 核心的组成部分.无需安装即可使用这些函数. Runtime 配置 杂项函数的行为受 php.ini 文件中的设置的影响. 杂项配置选项: 名称 默认 描述 可更改 ignor ...

  10. [译] 什么是移动友好的 - Mobile-friendliness

    什么是移动友好的?   移动友好到底意味着什么取决于您与谁讨论它. 我们不妨这样理解: 移动友好的设计以 表现力, 内容和性能 三方面为目标来改善用户体验.   表现力 - Presentation ...