解法一、暴力法,正序,每次找当前元素之后所有元素的最大值,简洁明了,就是会超时
class Solution {
public int[] replaceElements(int[] arr) {
int l = arr.length;
int[] ans = new int[l];
for(int i=0;i<l-1;i++){
int [] t = new int[l-i-1];
System.arraycopy(arr, i+1,t,0,l-i-1);
Arrays.sort(t);
ans[i] = (int)t[t.length-1];
}
ans[l-1] = -1;
return ans;
}
}
解法二、重新创建一个新的数组,倒序遍历,每次比较当前元素和它右边的最大值,更新最大值
class Solution {
public int[] replaceElements(int[] arr) {
int[] res = new int[arr.length];
int max = -1;
for (int i = arr.length - 1; i >= 0; i--) {
res[i] = max;
max = Math.max(arr[i], max);
}
return res;
}
}
解法三、原地比较
package com.company;
public class replaceElements {
public static void main(String[] args){
replaceElements test = new replaceElements();
int [] a = {17,18,5,4,6,1};
int [] res = test.replaceElements(a);
for(int i = 0; i<a.length;i++){
System.out.print(res[i]);
}
}
public int[] replaceElements(int[] arr) {
int max = -1;
for (int i = arr.length - 1; i >= 0; i--) {
int t = arr[i];
arr[i] = max;
max = Math.max(t, max);
}
return arr;
}
}