您的位置:首页 > 其它

leetcode 33.Search in Rotated Sorted Array 旋转数组二分查找法搜索

2016-10-15 16:07 441 查看
题目来源leetcode 33.Search
in Rotated Sorted Array 地址:点击打开链接

代码

class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size();
int first = 0;
int last = n - 1;
int mid = first + (last - first) / 2;
if (nums[mid] == target)
return mid;
while (first != last) {
if (nums[first]<=nums[mid]) {
//左侧有序
if (target<nums[mid] && nums[first] <= target)
last = mid - 1;
else
first = mid + 1;
mid = first + (last - first) / 2;
if (nums[mid] == target)
return mid;
}
else if(nums[mid]<=nums[last]) {
//右侧有序
if (nums[mid]<target&&target <= nums[last])
first = mid + 1;
else
last = mid-1;
mid = first + (last - first) / 2;
if (nums[mid] == target)
return mid;
}
}
return -1;
}
};
笔记:这道题用二分法。首先思路上要明晰:中值左右两边至少有一边是有序的,所以分为两种情形,见注释。即便如此,在测试case时还是多次出现错误结果,改的心烦意乱,还用了本地调试器帮忙。上面的答案跟许多大神的相比不够简洁,跟坨shit一样,真不知道怎么才可写出简洁准确的代码。新手起步,挫折感较强。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐