1.数组基础
1.1 数组在内存中的存储方式:数组是存放在连续内存空间上的相同类型数据的集合。
1.2 数组的下标都是从0开始的
1.3 数组内存空间的地址是连续的(在增加或者删除时就需要移动其他元素,数组元素不能删除只能覆盖)
2.Leetcode 704.二分查找
代码
1.方法1—左闭右闭
class Solution {
public static int search(int[]nums,int target){//左闭右闭
int l=0;
int r=nums.length-1;
while (l<=r){//l=r,在区间内有意义
int mid=l+(r-l)/2;
if(nums[mid]>target){
r=mid-1;//已经判断了nus[mid]不等于target,所以更新r=mid-1
} else if (nums[mid]<target) {
l=mid+1;//同上
}else {
return mid;
}
}
return -1;
}
}
2.方法2—左闭右开
class Solution {
public static int search(int[]nums,int target){//左闭右闭
int l=0;
int r=nums.length;
while (l<r){//l=r,在区间内没有意义
int mid=l+(r-l)/2;
if(nums[mid]>target){
r=mid;//r不在区间内,因为当前nums[middle]不等于target,去左区间继续寻找,
// 而寻找区间是左闭右开区间,所以right更新为middle,
} else if (nums[mid]<target) {
l=mid+1;
}else {
return mid;
}
}
return -1;
}
}
3.总结:
3.1
要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。
3.2
通过题目要求来确定使用哪个方法,到底是左闭有闭还是左闭有开,然后再去判断while(判断条件),和l,r如何更新
3.LeetCode 27.移除元素
代码
public static void delete(int[]arr,int target){
int size=arr.length;
for (int i = 0; i <size ; i++) {
if(arr[i]==target){
for (int j = i+1; j <size ; j++) {
arr[j-1]=arr[j];
}
i--;
size--;
}
}
System.out.println(size);
for (int i = 0; i <size ; i++) {
System.out.printf(arr[i]+" ");
}
}
总结:
如果找到就将后面的数向前移动
注意:数组的中的数无法删除只能移动