3-sum问题

快来打我* 2022-06-06 12:16 291阅读 0赞

3-sum问题:统计一个不重复数组中3个数相加为0的组合。

  1. import java.util.Arrays;
  2. public class Main {
  3. public static void main(String[] args) {
  4. int[] in = { 3, 4, 5, 6, 1, -6, 8, 21 };
  5. Arrays.sort(in);
  6. //-6,1,3,4,5,6,8,21
  7. Main m = new Main();
  8. int length = in.length;
  9. int count = 0;
  10. for (int i = 0; i < length; i++) {
  11. for (int j = i + 1; j < length; j++) {
  12. // (X > j)的这个动作非常重要,让其向后查找
  13. //如果(X != -1)的话,会出现重复的情况,
  14. //例如:-6 1 5 和 -6 1 5 重复
  15. //会重复查找3两次 ,会出现 -6 3 3 的情况
  16. if (m.binarySearch(in, -(in[i] + in[j])) > j) {
  17. count++;
  18. }
  19. }
  20. }
  21. System.out.println("有"+count+"个3个数和为0的组合");
  22. }
  23. //二分查找
  24. public int binarySearch(int[] in, int key) {
  25. Arrays.sort(in);
  26. int lo = 0;
  27. int hei = in.length - 1;
  28. while (lo < hei) {
  29. int mid = hei + (lo - hei) / 2;
  30. if (key < in[mid]) {
  31. hei = mid - 1;
  32. } else if (key > in[mid]) {
  33. lo = mid + 1;
  34. } else {
  35. return mid;
  36. }
  37. }
  38. return -1;
  39. }
  40. }

发表评论

表情:
评论列表 (有 0 条评论,291人围观)

还没有评论,来说两句吧...

相关阅读

    相关 2sum问题3sum问题

    算法 这个书,190页介绍了 这两个问题 。 2sum的意思是 在一组数中,找到 两个数的和为零。有多少个这样的组合。 3sum是 找 有多少三个数的组合 ,他们的和为零

    相关 3Sum

    [原题链接][Link 1] 给一个拥有n个元素的数组S,S中是否会有a,b,c三个元素使得a+b+c=0?寻找出满足该条件的所有唯一三元组。 Note: 答案中必须不