[LeetCode] Search in Rotated Sorted Array II
2016-07-29 00:00
393 查看
https://leetcode.com/problems/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.
这道题目,需要注意有重复数字的情况,例如 1111 119 旋转为 119 1 111,那么[left,middle]区域将把9覆盖掉,这样,如果仍然使用之前的方法来做的话,如果target = 9,就直接把9漏掉了。同样,01111 11 旋转为 110 1 111,也会把0的查找漏掉。因此如果遇到nums[left]与nums[middle]相等的情况,我们需要对范围内的整个数组进行遍历来查找。代码如下:
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.
这道题目,需要注意有重复数字的情况,例如 1111 119 旋转为 119 1 111,那么[left,middle]区域将把9覆盖掉,这样,如果仍然使用之前的方法来做的话,如果target = 9,就直接把9漏掉了。同样,01111 11 旋转为 110 1 111,也会把0的查找漏掉。因此如果遇到nums[left]与nums[middle]相等的情况,我们需要对范围内的整个数组进行遍历来查找。代码如下:
// Author: Jian-xin Zhou class Solution { public: bool search(vector<int>& nums, int target) { int left = 0, right = nums.size() - 1, middle; while (left + 1 < right) { middle = (left + right) >> 1; if (target == nums[middle]) { return true; } // 两者相等时,如果范围取 [left,middle],可能会有问题,例如 1119 1 1111 ,两个1之间夹了较大的9,二分可能会把9排除掉 if (nums[left] == nums[middle] ) { for (int ix = left; ix <= right; ix++) { if (target == nums[ix]) { return true; } } return false; } if (nums[left] < nums[middle]) { if (nums[left] <= target && target < nums[middle]) { right = middle; } else { left = middle; } } if (nums[middle] <= nums[right]) { if (nums[middle] < target && target <= nums[right]) { left = middle; } else { right = middle; } } } if (target == nums[left]) { return true; } if (target == nums[right]) { return true; } return false; } };
相关文章推荐
- Dynamic Programming | Set 1 (Overlapping Subproblems Property)
- 服务器设计系列:架构综述
- 算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[上]
- dbm数据库源代码分析(17):Makefile文件和其他文件
- 我的C++实践(6):模板与继承相结合的威力
- Linux系统管理实践(5):Samba文件共享配置
- Internetworking
- Introduction to Machine Learning
- B样条
- INTERESTING AND OBSCURE INHERITANCE ISSUES WITH CPP
- 数学图形(2.4)网球上的曲线
- 快速排序算法
- 浏览器的工作原理:现代网络浏览器幕后揭秘
- 编程实现Linux下的ls -l
- 从导数谈起
- Linux系统管理实践(3):GRUB系统引导配置
- 机器学习之神经网络模型-上(Neural Networks: Representation)
- Python反射指南
- [Project] MiniSearch文本检索简介
- Linux信号处理2