leetcode题解-33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
2017-04-20 16:41
465 查看
31,题目:
这道题目是在一个反转中的数组中寻找一个数的索引,我们可以采用Binary Search的方法进行寻找,与传统二分法不同的是,这里需要考虑中间值是位于反转值之前还是之后,需要多加一个判断,代码如下所示:
81,本体是基于33题,加了一个约束条件:数组中的数是可重复的,我们需要添加一个判断的就是前后元素是否相等,如果相等的话直接跳过即可。代码入下:
Suppose an array sorted in ascending order 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.
这道题目是在一个反转中的数组中寻找一个数的索引,我们可以采用Binary Search的方法进行寻找,与传统二分法不同的是,这里需要考虑中间值是位于反转值之前还是之后,需要多加一个判断,代码如下所示:
public static int search(int[] nums, int target) { int start = 0; int end = nums.length - 1; while (start <= end){ int mid = (start + end) / 2; if (nums[mid] == target) return mid; //start小于mid说明mid在反转值之前 if (nums[start] <= nums[mid]){ if (target < nums[mid] && target >= nums[start]) end = mid - 1; else start = mid + 1; } //mid小于end说明mid在反转值之后 if (nums[mid] <= nums[end]){ if (target > nums[mid] && target <= nums[end]) start = mid + 1; else end = mid - 1; } } return -1; }
81,本体是基于33题,加了一个约束条件:数组中的数是可重复的,我们需要添加一个判断的就是前后元素是否相等,如果相等的话直接跳过即可。代码入下:
public boolean search(int[] nums, int target) { int left=0, right=nums.length-1, mid; while(left <= right){ mid = (left+right)/2; if(nums[mid] == target) return true; if(nums[mid] < nums[left] || nums[mid] < nums[right]){ if(target > nums[mid] && target <= nums[right]) left = mid+1; else right = mid -1; }else if(nums[mid] > nums[left] || nums[mid] > nums[right]){ if(target < nums[mid] && target >= nums[left]) right = mid-1; else left = mid + 1; }else right--; } return false; }
相关文章推荐
- [LeetCode] Search in Rotated Sorted Array I (33) && II (81) 解题思路
- LeetCode 33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
- leetcode题解-81 Search in Rotated Sorted Array II
- [Leetcode]33(81). Search in Rotated Sorted Array I, II
- Leetcode 33, 81 Search in Rotated Sorted Array I, II
- LeetCode 33,81. Search in Rotated Sorted Array i, ii
- !leetcode[33&81]:Search in Rotated Sorted Array[I & II]
- LeetCode(33)(81) Search in Rotated Sorted Array I II
- leetcode[81] Search in Rotated Sorted Array II
- leetCode 81.Search in Rotated Sorted Array II (旋转数组的搜索II) 解题思路和方法
- leetcode 题解:Search in Rotated Sorted Array II (旋转已排序数组查找2)
- LeetCode --- 81. Search in Rotated Sorted Array II
- [leetcode-81]Search in Rotated Sorted Array II(C)
- leetcode || 81、Search in Rotated Sorted Array II
- [Leetcode] 81. Search in Rotated Sorted Array II
- [LeetCode]81 Search in Rotated Sorted Array II
- Leetcode 81. Search in Rotated Sorted Array II
- leetcode 81. Search in Rotated Sorted Array II
- LeetCode 81 Search in Rotated Sorted Array II
- leetcode[81]Search in Rotated Sorted Array II