美文网首页程序员
数组查找算法,数组,a + b = c

数组查找算法,数组,a + b = c

作者: 酒馆儒生 | 来源:发表于2017-12-07 16:52 被阅读0次

题目

给定一个无序数组,例如int[] arr={3,5,8,9,12,21,27},列出所有满足条件的集合:

  1. 集合中包含两个值a、b(a和b都在数组中,且a不等于b)
  2. a+b=c,c也要在数组中

思考

  1. 先排序。
  2. 用 a 和 b的索引来做嵌套循环,a主循环,b子循环,迭代出所有a+b的组合。
  3. 将c的索引加入到子循环中,若
    arr[a] + arr[b] > arr[c] 则将c++,向右继续寻找有可能相等的c。
    arr[a] + arr[b] < arr[c] 则说明右边不可能有相等的c,直接b++,找下一个a+b。
    相等则放入数组中。

总结

主要思路是利用排序好的数组从小到大的原理,移动a和b,然后在b的右侧寻找相等的c.

Java解法

package learning;
import java.util.*;
public class ArraySearcher {
    public static List<int[]> searchABC(int[] arr) {
        if (null == arr || arr.length == 0) {
            return null;
        }

        int length = arr.length;
        List<int[]> abcPair = new ArrayList<>();
        //先从小到大排序
        Arrays.sort(arr);
        //主循环,用于a的起点向右移动
        for (int a = 0; a < length ; a++) {
            int b = a;
            int c = a + 1;
            //子循环,主要移动c来查找a+b=c
            while (c < length) {  //从左到右
                if (arr[a] + arr[b] > arr[c]) {  
//因为数组有序,所以若a + b > c 则说明c有可能在右边,移动c
                    c++;
                } else if (arr[a] + arr[b] < arr[c]) {  
//若 a + b < c,c不可能在右边,b往右移
                    b++;
                } else {
                    int[] pair = {arr[a],arr[b],arr[c]};  
//找到abc,加入列表
                    abcPair.add(pair);
                    c++;
                }
            }
        }
      return abcPair;
    }

    public static void main(String[] args) {
        int[] lst = {3,5,8,9,12,21,27};
        List<int[]>  result = ArraySearcher.searchABC(lst);
        for(int[] l: result) {
            System.out.println(l[0]+ " + " + l[1] + " = " + l[2]);
        }
    }

}

相关文章

  • 数组查找算法,数组,a + b = c

    题目 给定一个无序数组,例如int[] arr={3,5,8,9,12,21,27},列出所有满足条件的集合: 集...

  • Search Insert Position

    标签: C++ 算法 LeetCode 数组 二分查找 每日算法——leetcode系列 问题 SeSearch...

  • Search for a Range

    标签: C++ 算法 LeetCode 数组 二分查找 每日算法——leetcode系列 问题 Search f...

  • 顺序查找

    1、顺序查找a为数组,n为查找的数组个数,key为要查找的关键字; 2、顺序查找_哨兵 3、折半查找算法假设数组a...

  • PHP 数组(Array) - 排序算法

    PHP手册 - 对数组进行排序 数组查找算法查找算法,就是从一个数组中,找一个“目标”(可以是值,也可以是键)的算...

  • 归并排序

    算法思想 这个算法中基本的操作是合并两个已排序的数组,取两个输入数组 A 和 B,一个输出数组 C,以及三个计数器...

  • 算法题之: 三数求和并去重

    题目:对于一个整数的数组, 是否存在a, b, c 使得 a + b + c = 0, 返回a b c 数组 相同...

  • 蓝杯四十一

    算法训练 数组查找及替换 时间限制:1.0s 内存限制:512.0MB 问题描述 给定某整数数组和某一整数b...

  • 二分查找算法

    二分查找算法或者折半查找算法,是一种在有序数组中查找某一特定元素的搜索算法。 搜索过程从数组的中间元素开始,如果中...

  • 按奇偶排序数组 II

    题目: 题目的理解: 将数组A分成奇数数组B和偶数数组C,然后将C和B交叉组成数组D。 python实现 提交 成...

网友评论

    本文标题:数组查找算法,数组,a + b = c

    本文链接:https://www.haomeiwen.com/subject/erqjixtx.html