1-1.704题二分查找
题目
思路
经典二分法
代码
class Solution {
public int search(int[] nums, int target) {
int low = 0;
int high = nums.length - 1;
int mid;
while (low <= high){
// mid = low + ((high - low) / 2); //防止溢出
mid = (low + high) / 2;
if (target == nums[mid]){
return mid;
}
else if (target < nums[mid]){ //右区间左移
high = mid - 1;
}
else{ //左区间右移
low = mid + 1;
}
}
return -1;
}
};
总结
- 数组下标low=0,上标high=nums.length
- 注意左闭右闭和左闭右开两种写法
1-2.27题移除元素
题目
思路
暴力破解:找到待删除元素位置,不断将后置元素前移
代码
class Solution {
public int removeElement(int[] nums, int val) {
int size = nums.length;
for (int i = 0; i < size; i++){
if (nums[i] == val){ //找到需要移除的元素
for(int j = i + 1; j < size; j++){
nums[j - 1] = nums[j]; //将其他元素前移
}
i--; //i及时回退
size--; //数组大小及时减1
}
}
return size;
}
};
总结
暴力破解:时间复杂度:
O
(
n
2
)
O(n^2)
O(n2),空间复杂度:
O
(
1
)
O(1)
O(1)
双指针法:时间复杂度:
O
(
n
)
O(n)
O(n),空间复杂度:
O
(
1
)
O(1)
O(1)