java - 如何在整数数组、映射、哈希集等中找到给出相同结果的第一个和最后一个值?
问题描述
这是一些伪代码来解释我的问题。
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]
我希望我已经解释清楚了。
解决方案
假设数字是正数,您可以这样做:
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;
}
推荐阅读
- javascript - 在反应应用程序中运行 npm run dev 命令时出错
- java - 使用 Java 8 构建的 GraalVM 本机映像失败,并出现错误 com.oracle.svm.core.hub.DynamicHub.getGenericInfo() 方法在此平台不可用
- javascript - 如何使用 npm(pact 文件)一起运行多个 .js 测试文件?
- sql - 将星期几名称转换为星期几编号 Vertica
- python - 为什么我的图像加载到数据集中都是白色的?
- google-apps-script - 通过 Google Apps 脚本获取每张幻灯片的 lh3.googleusercontent.com 链接
- c - 测试 FPE 和陷阱 FPE 有什么区别?
- java - Spring Webclient decode custom application/multipart-related,application/dicom (Wado-RS)
- c++ - c++中模板类的重载运算符ostream不起作用
- php - ->toArray() 给出空数组而不是对象