题解 | 在旋转过的有序数组中寻找目标值
在旋转过的有序数组中寻找目标值
http://www.nowcoder.com/practice/87c0e7abcbda41e7963660fa7d020995
解法一:暴力
- (修正)之前的分析有些错误的地方,没有考虑数组旋转的带来的影响(具体已经在解法二中修正了)。大意的理解为就是给你一个数组和target(目标值),让寻找与目标值相同的元素并返回对应索引,如果不存在就返回-1;比较典型的二分题目。其实题目中对数组的旋转还是有些坑!!!
- 此类问题,首先想到的是暴力搜,可以AC!。
- 这个很暴力,应该没什么问题。
C++参考代码:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { //获取数组长度 int len = nums.size(); for(int i=0;i<len;i++){ if(nums[i]==target){ return i; } } //不存在target,返回-1 return -1; } };
复杂度分析:
时间复杂度:O(N) ,其中N为数组长度,最坏情况下遍历整个数组。
空间复杂度:O(1) 没有开辟额外空间,因此空间复杂度为常数开销。
解法二:二分查找
- 涉及到查找问题,一般情况下,二分查找都是一个可以 考虑的选择。
- 相比于暴力,二分的速度会快很多,简单的二分实现起来也并不很难。
- 由于数组可能在某个位置开始进行了旋转,因此不能直接套用常规的二分
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
小白专属-牛客题解 文章被收录于专栏
专注于牛客平台编程题题解,文字+图解。内容很细,小白友好系列