前天在某个公司的现场笔试中遇到一道编程题,很简单,然后当时直接写了个双重循环:
public static ArrayList<String> findNumCouple1(int[] array, int key) {
ArrayList<String> strArray = new ArrayList<String>();
Arrays.sort(array);
int left = 0;
int right = array.length - 1;
while (left < array.length && left < right) {
if(array[left] + array[right] < key){
left++;
}
else if (array[left] + array[right] > key) {
right--;
}
else {
String couple = "(" + array[left] + "," + array[right] + ")";
strArray.add(couple);
left++;
right--;
}
}
return strArray;
}
今天在做练习的时候,遇到一道类似的题,求数组中整数对与key的最小差值,然后想到了另外一种方法:
public static ArrayList<String> findNumCouple2(int[] array, int key) {
ArrayList<String> strArray = new ArrayList<String>();
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
for (int j = i; j < array.length; j++) {
if(array[i] + array[j] == key){
String couple = "(" + array[i] + "," + array[j] + ")";
strArray.add(couple);
}
}
}
return strArray;
}