704. 二分查找
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-search/
思路:
第一反应就是可以直接暴力解决。直接一个for循环挨个比较就好了。
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;
}
}
突然意识到这个题目就是二分查找。。。
了解了二分查找左闭右开,左闭右闭的边界值如何确定。
class Solution {
public int search(int[] nums, int target) {
int i = 0;
int j = nums.length-1;
while(i <= j){
int middle = (i+j)/2;
if(nums[middle] < target){
i = middle+1;
}
else if(nums[middle] > target){
j = middle -1;
}
else
return middle;
}
return -1;
}
}
27. 移除元素
思路:使用双指针
第一个指针遍历数组所有元素
第二个指针来指向新数组元素
当一个指针指向的元素和要删除的值不相等时,将它存储在第二个指针指向的数组
class Solution {
public int removeElement(int[] nums, int val) {
int ans = 0;
for (int i = 0; i < nums.length; i++){
if(nums[i] != val){
nums[ans] = nums[i];
ans++;
}
}
return ans;
}
}