1.題目
2.算法思路
暴力解法:可以將數組遍歷一遍,就可以找到。時間復雜度為O(n)。不算太差,可以接受。
但是有更優秀的解法:
就是二分查找算法。
算法的特點:我們所查找的“數組”具有二段性。這里的二段性不一定有序。而是我們可以找到某種規律,可以讓我們把數組分為兩部分,然后舍掉一部分,對另一部分進行求解。
本題中數組的有序就是二段性的一種體現。
在后面的題目中,我會舉一個無序的但是可以用二分查找算法解決的題目。
3.代碼
class Solution {
public:int search(vector<int>& nums, int target) {int left=0,right=nums.size()-1;while(left<=right){int mid=left+(right-left)/2;//防止溢出if(nums[mid]>target) right=mid-1;else if(nums[mid]<target) left=mid+1;else return mid; }return -1;}
};
時間復雜度:O(longn)。