704.二分查找:
1.左閉右閉
int search(vector<int>& nums, int target) {int right = nums.size() - 1;int left = 0;while(left < right){int middle = left + ((right - left) >> 1);if(nums.at(middle) == target){return middle;}else if(nums[middle] > target){right = middle - 1;}else{left = middle + 1;}}return -1;}
2.左閉右開
int search(vector<int>& nums, int target) {int right = nums.size();int left = 0;while(left < right){int middle = left + ((right - left) >> 1);if(nums.at(middle) == target){return middle;}else if(nums[middle] > target){right = middle;}else{left = middle + 1;}}return -1;}
遇到問題:
如果middle等變量的類型采用auto,跑測試用例nums=[5] target=-5時會報錯index越界,后采用int類型。
27.移除元素
int removeElement(vector<int>& nums, int val) {int length = nums.size();int count = 0;for(int i = 0; i < length; i++){if(nums[i] == val){continue;}else{nums[count++] = nums[i];}}return count;}
977.有序數組的平方
注意:考慮非單調遞減數組前后的平方值是最大的,中間的是最小的。遍歷時從兩頭往中間走,從后往前存計算結果,就能達到上述要求
vector<int> sortedSquares(vector<int>& nums) {vector<int> result(nums.size());int left = 0;int right = nums.size() - 1;int index = nums.size() - 1;while(left <= right){int square_left = nums[left] * nums[left];int square_right = nums[right] * nums[right];if(square_left > square_right){result[index--] = square_left;left++;}else{result[index--] = square_right;right--;}}return result;}