苹果苹果爱泡泡 2022-06-17 17:47 采纳率: 0%
浏览 18
已结题

力扣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)

我的解答思路和尝试过的方法

如果将&改为&&,则不会报错,用注释掉的代码同样会报错

我想要达到的结果

想要知道这个步骤中,采用&和&&的区别,以及将&&左右两边内容调换的区别

  • 写回答

1条回答 默认 最新

  • 苹果苹果爱泡泡 2022-06-17 20:41
    关注

    自问自答了:
    这里不能用&,因为如果j++后,j等于nuns.length,那么在while判断中nums[j]会存在溢出问题,所以此处必须用&&,同时要将j<n放在前面阻隔

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 已采纳回答 6月17日
  • 创建了问题 6月17日