Day01 数组
数组part01
- 704.二分查找力扣题目链接
我的思路:
因为是有序数组,使用两个指针,分别指数组两端,比较目标值和数组中间值
问题和思考:
超出时间限制,debug之后发现for循环写错了
解答:
class Solution {
public int search(int[] nums, int target) {
int i = 0, j = nums.length-1;
for (; i <= j; ) {
int mid = i + (j - i) / 2;
if(nums[mid] == target){
return mid;
}
if (nums[mid] < target) {
i = mid + 1;
}
else if (nums[mid] > target) {
j = mid - 1;
}
}
return -1;
}
}
2024.2.28更新:
JAVA韩顺平看到Arrays类方法,发现有更简单的方法:
class Solution {
public int search(int[] nums, int target) {
Arrays.sort(nums);
int result = Arrays.binarySearch(nums, target);
if(!(result >= 0 && result <= nums.length - 1)) {
return -1;
}
return result;
}
}
- 27.移除元素 力扣题目链接
我的思路:
想成了排序后二分查找删除,但是看到返回类型蒙圈了
看题解后意识到要用指针
总之就是read指针一路读,write指针判断写
解答:
class Solution {
public int removeElement(int[] nums, int val) {
int write = 0;
for(int read = 0; read < nums.length; read++){
if(nums[read] != val) {
nums[write] = nums[read];
write ++;
}
}
return write;
}
}
总结
数组要学会用指针