704. 二分查找
原题链接:https://leetcode.com/problems/binary-search/description/
暴力解完之后才反应过来题目要求O(log n)复杂度,果然没那么简单哈哈。。。
class Solution {
public int search(int[] nums, int target) {
for(int i = 0; i < nums.length;i++){
if (nums[i] == target) return i;
}
return -1;
}
}
思路逻辑基本没啥问题但是卡在了左右指针的取值上,就是开闭区间容易搞混。一定要注意在左闭右闭情况下,取right = mid-1, left = mid + 1,不能直接设置成Mid因为已经检查过mid不等于target了,否则会喜提time limit exceeded错误掉进inifinite loop
class Solution {
public int search(int[] nums, int target) {
int left = 0, right = nums.length-1;
while(left <= right){
int mid = left + (right-left)/2;
if(target == nums[mid]) return mid;
else if(target < nums[mid])
right = mid - 1;
else left = mid + 1;
}
return -1;
}
}
27. 移除元素
原题链接: https://leetcode.com/problems/remove-element/description/
class Solution {
public int removeElement(int[] nums, int val) {
int k = 0;
for(int i = 0; i < nums.length;i++){
if(nums[i] != val){
nums[k++] = nums[i];
}
}
return k;
}
}
这题用的就是快慢指针,K就是慢指针,用来存贮找到了的不等于val的数,同时k最后的长度被返回。