1.二分查找
题目链接:704.二分查找
1.看到题目的想法就是这道题目我写过,还是比较简单的,有序不重复的数组,定义一个左边界和有边界,确定中间元素位置,然后比较目标元素和中间元素大小,选择在左区间或者又区间查找。
2.学习视频链接
3.自己在实现过程中,没有确定好边界值,导致有些测试用例不通过
code
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] < target) {
left = mid + 1;
}
else if (nums[mid] > target) {
right = mid - 1;
}
else {
return mid;
}
}
return -1;
}
}
4.学习感悟
写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)
2.移除元素
题目链接:27.移除元素
1.这道题印象没有那么深刻,但是看完题目之后,也是觉得不太难,思路是:遍历这个数组,判断当前下表的值是否等于目标值,相等就用后一个元素的值覆盖当前元素。
2.学习视频链接
3.
code
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--;
size--;
}
}
return size;
}
}
4.学习感悟
题目看起来简单,写起来没那么容易,首先题目要求原地修改数组,找到目标元素后,要删除元素,就是要把当前元素后面所有的元素向前移动,使用暴力解法就是两层循环,一层遍历找到目标元素,第二层把目标元素后面所有的元素向前移动,要考虑移动之后数组的长度要减一,然后再从新的数组遍历