33. Search in Rotated Sorted Array
2016-04-03 04:44
399 查看
虽然是hard难度,其实也没有很难
分为三种情况:
1. 如果nums[mid] == target
那么返回mid
2. 如果nums[mid] < nums[right]
那么说明在nums里面,从mid到right的顺序是正确的,所以:
1)如果target值范围介于nums[mid]和nums[right]之间
那么结果就在mid的右侧,所以left = mid+1;
2)否则right = mid-1
3.否则(也就是nums[mid]>= nums[right],就说明从left到mid的顺序是对的)
1)如果target值在left到mid中间
那么,right = mid-1;
2) 否则,left = mid+1
bug记录
12行和18行,<=和>=,不能漏掉=,否则在边界上的数字就会被忽略,导致错误结果
分为三种情况:
1. 如果nums[mid] == target
那么返回mid
2. 如果nums[mid] < nums[right]
那么说明在nums里面,从mid到right的顺序是正确的,所以:
1)如果target值范围介于nums[mid]和nums[right]之间
那么结果就在mid的右侧,所以left = mid+1;
2)否则right = mid-1
3.否则(也就是nums[mid]>= nums[right],就说明从left到mid的顺序是对的)
1)如果target值在left到mid中间
那么,right = mid-1;
2) 否则,left = mid+1
public int search(int[] nums, int target) { if(nums == null || nums.length == 0) { return -1; } int left = 0; int right = nums.length-1; while(left <= right) { int mid = left+(right-left)/2; if(nums[mid] == target) { return mid; } else if(nums[mid] < nums[right]) { if(target > nums[mid] && target <= nums[right]) { left = mid + 1; } else { right = mid - 1; } } else { if(target < nums[mid] && target >= nums[left]) { right = mid-1; } else { left = mid+1; } } } return -1; }
bug记录
12行和18行,<=和>=,不能漏掉=,否则在边界上的数字就会被忽略,导致错误结果
相关文章推荐
- MPI和OpenFOAM
- Gym 100942I Manhattan Project (set)
- 报错解决openmpi
- Android面试准备 第一天 第2-4例
- 284. Peeking Iterator
- [LeetCode] Combine Two Tables 联合两表
- 高算 openmpi no route to host
- C++对象模型:成员变量<一>非静态成员变量
- Web墨卡托投影(转) Google Maps地图投影全解析(1):Web墨卡托投影
- MyView绘图类的对View的重载(android)
- 为WebRTC 应用部署Turn Server
- CentOS中nginx负载均衡和反向代理的搭建
- linux vi命令的使用方法
- 使用git推送代码到开源中国以及IDEA环境下使用git
- POJ 1328 Radar Installation
- Oriented Bounding Box 碰撞检测
- python中的字符串
- 80. Remove Duplicates from Sorted Array II
- lamp环境配置
- BST (Binary Search Tree)