三指针解决hashmap问题
- 注意重复指针跳过的方法
This commit is contained in:
parent
bdbfa1854c
commit
93cbd6955c
68
src/main/java/cn/whaifree/leetCode/Hash/LeetCode15.java
Normal file
68
src/main/java/cn/whaifree/leetCode/Hash/LeetCode15.java
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
package cn.whaifree.leetCode.Hash;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class LeetCode15 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
new Solution().threeSum(new int[]{-1, 0, 1, 2, -1, -4}).forEach(integers -> {
|
||||||
|
System.out.println();
|
||||||
|
integers.forEach(
|
||||||
|
integer -> System.out.print(integer + " ")
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
/**
|
||||||
|
* TODO 2024-1-3 用三指针,没做出来
|
||||||
|
* @param nums
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<List<Integer>> threeSum(int[] nums) {
|
||||||
|
Arrays.sort(nums);
|
||||||
|
List<List<Integer>> o = new ArrayList<>();
|
||||||
|
// 排序后第一个就大于0,必然不可能有结果
|
||||||
|
if (nums[0] > 0) {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < nums.length; i++) {
|
||||||
|
|
||||||
|
int left = i + 1;
|
||||||
|
int right = nums.length - 1;
|
||||||
|
|
||||||
|
// 如果前后两个i 相同,跳过
|
||||||
|
if (i > 0 && nums[i] == nums[i - 1]) { // 去重a
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (left < right) {
|
||||||
|
int number = nums[i] + nums[right] + nums[left];
|
||||||
|
if (number > 0) {
|
||||||
|
right--;
|
||||||
|
} else if (number < 0) {
|
||||||
|
left++;
|
||||||
|
} else {
|
||||||
|
o.add(Arrays.asList(nums[i], nums[left], nums[right]));
|
||||||
|
// 去重逻辑应该放在找到一个三元组之后,对b 和 c去重
|
||||||
|
// 如果 right左边的两个一样,去重,跳过去,但依然要保证要比left大
|
||||||
|
while (right > left && nums[right] == nums[right - 1]){
|
||||||
|
right--;
|
||||||
|
}
|
||||||
|
while (right > left && nums[left] == nums[left + 1]) {
|
||||||
|
left++;
|
||||||
|
}
|
||||||
|
right--;
|
||||||
|
left++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user