我正在创建一个程序来查找任何两个数组元素的总和,它等于我需要的给定值。检查适当的补丁时 离。,
import java.util.ArrayList;
import java.util.Arrays;
public class PairedSums {
public static ArrayList<Integer> pairedOfValues(int[] a,int givenValue){
Arrays.sort(a);
ArrayList<Integer> arrayList;
int n = a.length - 1;
if (a[0] == givenValue){
arrayList = new ArrayList<>();
arrayList.add(a[0]);
return arrayList;
}
else if (a[n] == givenValue){
arrayList = new ArrayList<>();
arrayList.add(a[0]);
return arrayList;
}
else {
int low = 0;
int high = n;
while (a[low] < a[high]){
if (a[low] == givenValue){
arrayList = new ArrayList<>();
arrayList.add(a[low]);
return arrayList;
}
else if (a[high] == givenValue){
arrayList = new ArrayList<>();
arrayList.add(a[high]);
return arrayList;
}
else if ((low == high )){
arrayList = new ArrayList<>();
arrayList.add(a[high]);
return arrayList;
}
if (a[low] == 0){
low++;
}
else if (a[high] == 0){
high--;
}
else {
int sum = a[low] + a[high];
if (sum == givenValue){
arrayList = new ArrayList<>();
arrayList.add(a[low]);
arrayList.add(a[high]);
return arrayList;
}
else {
if (sum < givenValue){
low++;
}
else {
high--;
}
}
}
}
}
return null;
}
public static void main(String[] args){
int[] a = {10, 0, -1, 20, 25, 30};
int givenValue = 45;
ArrayList<Integer> arr = pairedOfValues(a,givenValue);
System.out.println(arr);
}
}
每次我这样做并手动添加它时,我都会一直初始化数组。我试着创建一个方法
public static ArrayList<Integer> sum(ArrayList<Integer> arr,int[] a,int i){
arr = new ArrayList<>();
arr.add(a[i]);
return arr;
}
但是当我在if else语句中声明它时,它表示没有初始化ArrayList变量,这是正确的。有没有办法可以在方法中初始化它,这样我就不必一遍又一遍地初始化它。
答案 0 :(得分:0)
你的代码是正确的(算法并不完美,但没关系)。我刚刚把你的代码放到我的IDE中并获得了大约10个警告并修复了所有这些代码。如果您必须使用预定义的项目数量创建List
,请使用Collections.singletonList()
和/或Arrays.asList()
。下面是你的代码,格式很少,我觉得它看起来好多了,没有你的问题:
public static List<Integer> pairedOfValues(int[] a, int givenValue) {
Arrays.sort(a);
int n = a.length - 1;
if (a[0] == givenValue || a[n] == givenValue)
return Collections.singletonList(a[0]);
int low = 0;
int high = n;
while (a[low] < a[high]) {
if (a[low] == givenValue)
return Collections.singletonList(a[low]);
if (a[high] == givenValue || low == high)
return Collections.singletonList(a[high]);
if (a[low] == 0)
low++;
else if (a[high] == 0)
high--;
else {
int sum = a[low] + a[high];
if (sum == givenValue)
return Arrays.asList(a[low], a[high]);
if (sum < givenValue)
low++;
else
high--;
}
}
return Collections.emptyList();
}
P.S。我认为这个算法不包括情况,当给定arr
有多对时。看看我的,它具有相同功能的代码较少(这仅供您进一步调查)。
public static List<Integer> pairedOfValues(int[] arr, int givenValue) {
if (arr == null || arr.length < 2)
return Collections.emptyList();
Arrays.sort(arr);
List<Integer> res = new ArrayList<>();
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length && arr[i] + arr[j] <= givenValue; j++)
if (arr[i] + arr[j] == givenValue) {
res.add(arr[i]);
res.add(arr[j]);
}
}
return res;
}