hello-algo/codes/java/chapter_doublePointer/double_pointer.java
2022-12-03 15:47:32 +08:00

45 lines
1.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import java.util.Arrays;
public class double_pointer {
public static void main(String[] args) {
//int[] arr = {3,2,2,3};
//int res = removeElement(arr, 3);
//System.out.println("移除元素后的有效长度"+res+" :"+" 移除过后数组内的数据"+ Arrays.toString(arr));
int[] arr = {2,7,11,15};
int[] result = twoSum(arr, 9);
System.out.println("结果集:"+ Arrays.toString(result));
}
//快慢指针案例
static int removeElement(int[] nums, int val) {
int fast = 0, slow = 0;
while (fast < nums.length) {
//如果等于target那么fast++slow记录命中的下表等到fast找到不等于的时候替换slow
if (nums[fast] != val) {
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
//相向左右指针案例
static int[] twoSum(int[] nums, int target) {
// 一左一右两个指针相向而行
int left = 0, right = nums.length - 1;
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == target) {
return new int[]{left, right};
} else if (sum < target) {
left++; // 让 sum 大一点
} else if (sum > target) {
right--; // 让 sum 小一点
}
}
return new int[]{-1, -1};
}
}