力扣532,二分中&&和&

问题遇到的现象和发生背景
  1. 数组中的 k-diff 数对,二分法
问题相关代码,请勿粘贴截图
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放在前面阻隔