当我被要求编写一个方法来检查数组列表中的任何对是否等于给定值时,我想出了这个:
import java.util.ArrayList;
public class FindWhetherTwoInArrEqual {
public static void main(String[] args) {
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(10); arr.add(12);
arr.add(18); arr.add(10);
arr.add(8); arr.add(12);
arr.add(33); arr.add(28);
arr.add(2); arr.add(20);
findWhetherTwoInArraySumToValue(arr, 30);
}
public static boolean findWhetherTwoInArraySumToValue(ArrayList<Integer> array, int value)
{
for(int i = 0; i < array.size(); ++i)
for(int j=i+1; j < array.size(); ++j)
if(array.get(i) + array.get(j) == value)
System.out.println(array.get(i) +" + "+ array.get(j) + " = " + value);
return false;
}
}
结果:
10 + 20 = 30
12 + 18 = 30
18 + 12 = 30
10 + 20 = 30
28 + 2 = 30
时间复杂度为O(n)。
有更有效的方法吗?
答案 0 :(得分:1)
假设该对不需要按特定顺序发生,您可以这样做:
http://gauss.ececs.uc.edu/Courses/C321/html/quicksort.java.html
答案 1 :(得分:1)
我不知道它是否更快并且忍受我,因为我只有15岁,但我认为您可以计算出数组中每个元素的对数,然后检查它是否在数组中。至少它看起来更简单(对我而言) 例:
public static boolean findWhetherTwoInArraySumToValue(ArrayList<Integer> array, int value)
{
for(int element : array){
int find = element - value;
if(array.contains(find)){
System.out.println(element +" + "+ find + " = " + value);
}
}
return false;
}
答案 2 :(得分:1)
订单-N,Marko指出:
通过1:确定您拥有的值。 Hashset by value,或30个元素数组中的tickmarks(假设您没有负数),或其他一些快速检索机制。
通过2:从found=0
开始。对于每个值,请检查表格以查看它是否包含30-value
。如果是,请增加found
。
返回found>1
。
答案 3 :(得分:1)
你可以尝试这段代码:
for(int i =0;i< array.size(); ++i){
if(array.contains(value - array.get(i)))
{
System.out.println((value - array.get(i)) +" + "+ array.get(i) + " = " + value);
}
}