首页 > 解决方案 > 如何在整数数组、映射、哈希集等中找到给出相同结果的第一个和最后一个值?

问题描述

这是一些伪代码来解释我的问题。

    ArrayList<Integer> values1 = new ArrayList<>();
    ArrayList<Integer> values2 = new ArrayList<>();
    ArrayList<Integer> results = new ArrayList<>();

    int[] list1 = {3,4,5,6,7,8,9,10,11};
    int[] list2 = {3,2,1,5,4,3,6,5,4};

    for (int id : list1) {
        values1.add(id);
    }

    for (int id2 : list2) {
        values2.add(id2);
    }

    for(int i = 0; i < list1.length; i++){
        results.add(values1.get(i)+values2.get(i));

    }

    System.out.println(results.toString());

结果是:

[6, 6, 6, 11, 11, 11, 15, 15, 15]

我的问题是:

我怎样才能只得到第一对和最后一对给出相同结果的值?

所以在这种情况下:

[3,3] [5,1]
[6,5] [8,3]
[9,6] [11,4]

我希望我已经解释清楚了。

标签: javaandroid

解决方案


假设数字是正数,您可以这样做:

List<List<Integer>> firsts = new ArrayList<>();
List<List<Integer>> lasts = new ArrayList<>();
List<Integer> prevPair = null;

for(int i = 0; i < list1.length; i++){
  List<Integer> thisPair = Arrays.asList(values1.get(i), values2.get(i));
  List<Integer> prevFirst = firsts.isEmpty() ? null : firsts.get(firsts.size()-1);
  if (getSum(thisPair) != getSum(prevFirst) ) {
    if (prevPair != null) {
      lasts.add(prevPair);
    }
    firsts.add(thisPair);
  }
  prevPair = thisPair;
}
lasts.add(prevPair);

System.out.println(firsts.toString()); // [[3, 3], [6, 5], [9, 6]]
System.out.println(lasts.toString()); // [[5, 1], [8, 3], [11, 4]]

getSum()方法将是:

public static Integer getSum(List<Integer> list) {
  return list != null ? list.get(0) + list.get(1) : -1;
}

推荐阅读