在for循环之外的ArrayList中改变了值



我正在学习Java,想找到最大和的连续子数组。我能够找到它,但是当我离开for循环时,保存在ArrayList中的子数组的值发生了变化。

public class FindingSumOfContiguousSubArray {

//code for computing sum of an array list
public int getSum (ArrayList <Integer> arraylist ) {

int sum = 0;
for (int i=0; i<arraylist.size(); i++) {
sum  += arraylist.get(i);
}
return sum;
}

private ArrayList<Integer> contigiousSubArray(int [] array){
ArrayList <Integer> finalList = new ArrayList<Integer>();
int n = array.length;
int minVal = -1000;
for(int i = 0; i<n; i++) {
ArrayList<Integer> aList = new ArrayList<Integer>(); //taking local object of ArrayList
for(int j = i; j<n; j++) {
aList.add(array[j]); //{-2, 1}

int sum = getSum(aList);

//System.out.println(minVal);
if (sum > minVal) {
minVal = sum;
//finalList.clear();
finalList = aList;
System.out.println(sum);
System.out.println(finalList);  
}
else continue;
}   
}

System.out.println(finalList);
return finalList;
}
public static void main(String[] args) {
FindingSumOfContiguousSubArray cSA = new FindingSumOfContiguousSubArray(); //creating class object

int [] inpArray = {-2, 1, -3, 4, -1, 2, 1, -5, 4};

ArrayList <Integer> contFinalList = cSA.contigiousSubArray(inpArray);

//System.out.println(contFinalList);
//System.out.println(cSA.getSum(contFinalList));
}
}

以下代码输出:

[1, -3, 4, -1, 2, 1]

5

[4, -1, 2]

6[4, -1, 2, 1]

[4, -1, 2, 1, -5, 4]

我不知道为什么我的数组列表在for循环外显示[4,- 1,2,1,- 5,4]

我不太确定你在这里找什么,但也许可以试试这个(你不需要这样的求和方法):

private static List<Integer> contigiousSubArray(int [] array){
List<Integer> finalList = new ArrayList<>();
int minVal = Integer.MIN_VALUE;
for(int i = 0; i < array.length; i++) {
List<Integer> aList = new ArrayList<Integer>(); //taking local object of ArrayList
for(int j = i; j < array.length; j++) {
aList.add(array[j]); //{-2, 1}

int sum = aList.stream()
.collect(Collectors.summingInt(Integer::intValue));

//System.out.println(minVal);
if (sum > minVal) {
minVal = sum;
finalList.clear();
finalList.addAll(aList);  
}
}   
}

return finalList;
}

try this:

public int contigiousSubArray(int[] arr) {
int[] result = new int[arr.length];
result[0]=arr[0];
for (int i = 1; i < arr.length; i++) {
result[i]=Math.max(result[i-1]+arr[i], arr[i]);
}
int maxSumArray = result[0];
for (int j = 1; j              if(maxSumArray<result[j])
maxSumArray = result[j];
}

return maxSumArray;
}```

最新更新