// @lcpr-template-start
using namespace std;
#include <algorithm>
#include <array>
#include <bitset>
#include <climits>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <queue>
#include <stack>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
// @lcpr-template-end
// @lc code=start
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0;
int right=nums.size()-1;
while(left<=right){
int middle=left+((right-left)/2);
if(nums[middle]>target){
right=middle-1;
}else if(nums[middle]<target){
left=middle+1;
}else{
return middle;
}
}
return -1;
}
};
// @lc code=end
int main(){
int test[6]={-1,3,5,6,8,12};
vector<int> nums(test,test + 6);
Solution s = Solution();
cout << s.search(nums, 8);
return 0;
}
/*
// @lcpr case=start
// [-1,0,3,5,9,12]\n9\n
// @lcpr case=end
// @lcpr case=start
// [-1,0,3,5,9,12]\n2\n
// @lcpr case=end
*/
通过这道题了解了升序数组的二分查找
class Solution
{
public:
int removeElement(vector<int> &nums, int val)
{
int slowIndex=0;
for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++)
{
if(nums[fastIndex]!=val){
nums[slowIndex++]=nums[fastIndex];
}
}
return slowIndex;
}
};
使用双指针法(快慢指针),比暴力法节省更多的时间和空间。时间复杂度o(n),空间复杂度o(1)