概要
題目來源鏈接:https://leetcode-cn.com/problems/replace-elements-with-greatest-element-on-right-side/
難度:簡單
類型:數組
題目
給你一個數組 arr
,請你將每個元素用它右邊最大的元素替換,如果是最後一個元素,用 -1
替換。
完成所有替換操作後,請你返回這個數組。
示例
示例:
輸入:arr = [17,18,5,4,6,1]
輸出:[18,6,6,6,1,-1]
提示:
1 <= arr.length <= 10^4
1 <= arr[i] <= 10^5
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/replace-elements-with-greatest-element-on-right-side
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
分析
第一種算法是暴力破解,即尋找每個元素右邊的最大元素,然後用最大值元素替換當前元素。
第二種算法是用一個指針從數組的最右邊開始向前遍歷,設定一個最大值,將當前元素替換成最大值,然後再將當前元素與最大值作比較,如果當前元素大於最大值則將當前元素賦給最大值。
代碼
Java代碼
第一種算法:暴力破解
/**
* 將每個元素替換爲右側最大元素
* @param arr 數組
* @return 返回完成替換操作的數組
*/
public int[] replaceElements(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {// 循環遍歷數組元素
arr[i]=max(arr,i+1,arr.length);// 將該元素後面的最大值元素,來替換該元素值
}
arr[arr.length-1]=-1;// 將最後一個元素賦值爲-1
return arr;
}
/**
* 在指定數組範圍內找到最大值元素
* @param arr 數組
* @param start 起始數組下標
* @param end 結束數組下標
* @return 返回起始下標和結束下標範圍內數組的最大值
*/
public int max(int[] arr,int start,int end){
int i=start;
int j=end;
int max = arr[i];
while (i<j){
if(arr[i]>max){
max=arr[i];
}
i++;
}
return max;
}
第二種算法
/**
* 將每個元素替換爲右側最大元素(第二種算法)
* @param arr 數組
* @return 返回完成替換操作的數組
*/
public int[] replaceElements(int[] arr){
int max=-1,temp;
for(int i=arr.length-1;i>=0;i--){
temp=arr[i];
arr[i]=max;
if(temp>max){
max=temp;
}
}
return arr;
}