for(int i=0;i<arr.length;i++){
int num=arr[i];
}
其中i是一个指针即一个引用
如果两个指针是相反方向是对撞指针
如果两个指针是相同方向,通过速度的不同或者起点的不同,达到处理的目的叫快慢指针
对撞指针:
public static int[] twoSum(int[] numbers, int target) {
int l = 0;
int r = numbers.length-1;
while(l < r){
if(numbers[l] + numbers[r] > target){
r--;
}else if(numbers[l] + numbers[r] < target){
l++;
}else{
return new int[]{l+1, r+1};
}
}
return new int[] {-1,-1};
}
快慢指针:
public static int removeDupLicates(int[] nums) {
if(nums.length==0)return 0;
//记录要比较的元素位置
int index=0;
for(int i=1;i<nums.length;i++) {
//如果不同,进行覆盖
if(nums[i]!=nums[index]) {
index++;
nums[index]=nums[i];
System.out.println("覆盖第"+index+"位置的元素为"+nums[i]);
}
}
//新数组的长度=最大索引+1
return index+1;
}
数组输入
0 | 0 | 1 | 1 | 2 |
输出数组
0 | 1 | 2 | 1 | 2 |