package pp.leetcode.q532;
import java.util.*;
/**
* @description:
* @author:PP
* @date:2022/6/17
*/
class Solution {
public int findPairs(int[] nums, int k) {
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
int n = nums.length, res = 0;
for (int i = 0, j = 0; i < n; i++) {
if (i == 0 || nums[i] != nums[i - 1]) {
while (j < n & nums[j] - nums[i] < k || j <= i) {
j++;
}
if (j < n & nums[j] - nums[i] == k) {
res++;
}
}
}
// for (int i = 0, j = 0; i < n; i++) {
// if (i == 0 || nums[i] != nums[i - 1]) {
// while ((nums[j] - nums[i] < k || j <= i) && (j < n)) {
// j++;
// }
// if ((nums[j] - nums[i] == k) && (j < n)) {
// res++;
// }
// }
// }
return res;
}
}
public class findPairs {
public static void main(String[] args) {
int num[] = {3, 1, 4, 1, 5};
Solution solution = new Solution();
solution.findPairs(num, 2);
}
}
/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56415:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home/jre/lib/rt.jar:/Users/P/IdeaProjects/JavaSE-Demos/out/production/JavaSE-Demos pp.leetcode.q532.findPairs
[1, 1, 3, 4, 5]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at pp.leetcode.q532.Solution.findPairs(findPairs.java:19)
at pp.leetcode.q532.findPairs.main(findPairs.java:49)
如果将&改为&&,则不会报错,用注释掉的代码同样会报错
想要知道这个步骤中,采用&和&&的区别,以及将&&左右两边内容调换的区别
自问自答了:
这里不能用&,因为如果j++后,j等于nuns.length,那么在while判断中nums[j]会存在溢出问题,所以此处必须用&&,同时要将j<n放在前面阻隔