【C++】【LeetCode】33. Search in Rotated Sorted Array
2017-06-11 15:51
429 查看
题目
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.
思路
数组其实就是原来的数组分成了两部分,判断target是在前半部分还是后半部分,然后按照二分查找即可。代码
第一次代码:LeetCode上的代码写的很简洁,但是按照我自己的思路写出来的代码就是分了很多判断分支。class Solution { public: int search(vector<int>& nums, int target) { int left = 0; int right = nums.size()-1; while (left < right) { int mid = (left + right) / 2; if (target == nums[mid]) { return mid; } else if (target == nums[0]) { return 0; } else if ((target > nums[0]) && (nums[mid] > nums[0]) && (target < nums[mid])) { right = mid - 1; } else if (target > nums[0] && nums[mid] < nums[0]){ right = mid - 1; } else if ((target > nums[0]) && (nums[mid] > nums[0]) && (target > nums[mid])) { left = mid + 1; } else if (target < nums[0] && nums[mid] > nums[0]) { left = mid + 1; } else if (target < nums[0] && nums[mid] < nums[0] && target < nums[mid]) { right = mid - 1; } else if (target < nums[0] && nums[mid] < nums[0] && target > nums[mid]) { left = mid + 1; } else { left++; } } if (left == right && target == nums[left]) { return left; } return -1; } };
第二次代码:把之前的代码稍稍进行了修改,看上去略清楚一些。
class Solution { public: int search(vector<int>& nums, int target) { int left = 0; int right = nums.size()-1; while (left < right) { int mid = (left + right) / 2; if (target == nums[mid]) { return mid; } else if (target == nums[0]) { return 0; } else if ( (nums[mid] > target && target > nums[0]) || (target > nums[0] && nums[0] > nums[mid]) || (nums[0] > nums[mid] && nums[mid] > target)){ right = mid - 1; } else if ( (target > nums[mid] && nums[mid] > nums[0]) || (nums[mid] > nums[0] && nums[0] > target) || (nums[0] > target && target > nums[mid]) ) { left = mid + 1; } else { left++; } } if (left == right && target == nums[left]) { return left; } return -1; } };
相关文章推荐
- LeetCode 33 — Search in Rotated Sorted Array(C++ Java Python)
- [C++]LeetCode: 44 Search in Rotated Sorted Array II
- [*leetcode 33] Search in Rotated Sorted Array
- LeetCode 33 Search in Rotated Sorted Array (C,C++,Java,Python)
- leetcode 33: Search in Rotated Sorted Array
- leetcode 33 -- Search in Rotated Sorted Array
- [leetcode 33] Search in Rotated Sorted Array
- Leetcode[33]-Search in Rotated Sorted Array
- Search in Rotated Sorted Array - LeetCode 33
- leetcode problem 33 -- Search in Rotated Sorted Array
- 33.search in rotated sorted array leetcode java
- LeetCode(33)Search in Rotated Sorted Array
- [LeetCode]33.Search in Rotated Sorted Array
- LeetCode 33 Search in Rotated Sorted Array 二叉查找(三)
- LeetCode --- 33. Search in Rotated Sorted Array
- leetcode[33]Search in Rotated Sorted Array
- Leetcode_search-in-rotated-sorted-array-ii(updated c++ and python version)
- LeetCode 33.Search in Rotated Sorted Array
- [Leetcode] 33. Search in Rotated Sorted Array
- LeetCode 之 Search in Rotated Sorted Array I II — C/C++ 实现