我解决了这个问题,但是在我的算法中我使用 String.valueOf 方法将数组的每个元素转换为字符串,这占用了大量的内存。我该如何优化我的代码?
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] list = new int[n + 1];
for (int i = 0; i < n; i++) {
list[i] = scanner.nextInt();
}
System.out.println(findMaxDifference(list,k));
}
public static long findMaxDifference(int[] list, int k) {
long result = 0;
for (int i = 0; i < k; i++) {
list = refactorNum(list);
result += list[list.length - 1]; // увеличиваю результат по последнему индексу массива
list[list.length - 1] = 0; // обновляю его
}
return result;
}
private static int[] refactorNum(int[] list) {
int prevIndex = -1;
int prevValue = -1;
for (int i = 0; i < list.length-1; i++) {
String stringNum = String.valueOf(list[i]); // (проблема) создаю n*k объектов String
for (int j = 0; j < stringNum.length(); j++) {
if (stringNum.charAt(j) != '9') {
stringNum = stringNum.replaceFirst(String.valueOf(stringNum.charAt(j)),"9");
int parsedInt = Integer.parseInt(stringNum);
if (parsedInt - list[i] > list[list.length-1]) {
if (prevIndex != -1) {
list[prevIndex] = prevValue;
}
prevIndex = i;
prevValue = list[i];
list[list.length-1] = parsedInt - list[i]; // ожидаемый результат
list[i] = parsedInt;
}
break;
}
}
}
return list;
}
}