go語言題解LeetCode1299將每個(gè)元素替換為右側(cè)最大元素
題目描述
1299. 將每個(gè)元素替換為右側(cè)最大元素 - 力扣(LeetCode)
給你一個(gè)數(shù)組 arr ,請(qǐng)你將每個(gè)元素用它右邊最大的元素替換,如果是最后一個(gè)元素,用 -1 替換。
完成所有替換操作后,請(qǐng)你返回這個(gè)數(shù)組。
示例 1:
輸入:arr = [17,18,5,4,6,1] 輸出:[18,6,6,6,1,-1] 解釋: - 下標(biāo) 0 的元素 --> 右側(cè)最大元素是下標(biāo) 1 的元素 (18) - 下標(biāo) 1 的元素 --> 右側(cè)最大元素是下標(biāo) 4 的元素 (6) - 下標(biāo) 2 的元素 --> 右側(cè)最大元素是下標(biāo) 4 的元素 (6) - 下標(biāo) 3 的元素 --> 右側(cè)最大元素是下標(biāo) 4 的元素 (6) - 下標(biāo) 4 的元素 --> 右側(cè)最大元素是下標(biāo) 5 的元素 (1) - 下標(biāo) 5 的元素 --> 右側(cè)沒有其他元素,替換為 -1
示例 2:
輸入:arr = [400] 輸出:[-1] 解釋:下標(biāo) 0 的元素右側(cè)沒有其他元素。
提示:
1 <= arr.length <= 10^4
1 <= arr[i] <= 10^5
思路分析
從題目可以看出
- 從右到左遍歷的話,剛好是從遍歷過的數(shù)中去尋找最大值。
- 從左到右遍歷的話,那么就需要提前比較還未遍歷的值。
不難看出從右到左遍歷只需要O(n)時(shí)間復(fù)雜度,
從左到右遍歷需要O(n^2)的時(shí)間復(fù)雜度
在這個(gè)題感悟到,其實(shí)有時(shí)候生活中遇到困難了,不妨換個(gè)思維去想一下
也許當(dāng)前困難不過是對(duì)自己的一種考驗(yàn)
多花點(diǎn)思維思考去解決比用簡單的惰性思維去“懶”解決要為后續(xù)實(shí)現(xiàn)的節(jié)省更多時(shí)間
AC 代碼
class Solution {
public int[] replaceElements(int[] arr) {
int max = -1;
for (int i = arr.length - 1; i >= 0; i--) {
int tmp = arr[i];
arr[i] = max;
if (tmp > max) {
max = tmp;
}
}
return arr;
}
}
Java 百分百 - 將每個(gè)元素替換為右側(cè)最大元素
逆序遍歷罷了
代碼
class Solution {
public int[] replaceElements(int[] arr) {
int max = -1;
int[] ans = new int[arr.length];
for(int i = arr.length-1;i >= 0;i--){
int temp = arr[i];
ans[i] = max;
max = Math.max(max,temp);
}
return ans;
}
}
從右往左一次遍歷 - 將每個(gè)元素替換為右側(cè)最大元素
從右往左遍歷,先記錄右邊最大值 rightMax 為最后一個(gè)值,向左每次更新 rightMax,使用變量 t 先記住當(dāng)前 arr[i] 就可以了。
class Solution {
public int[] replaceElements(int[] arr) {
int rightMax = arr[arr.length - 1];
arr[arr.length - 1] = -1;
for (int i = arr.length - 2; i >= 0; i--) {
int t = arr[i];
arr[i] = rightMax;
if (t > rightMax)
rightMax = t;
}
return arr;
}
}
以上就是go語言題解LeetCode1299將每個(gè)元素替換為右側(cè)最大元素的詳細(xì)內(nèi)容,更多關(guān)于go 元素替換右側(cè)最大元素的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言基于HTTP的內(nèi)存緩存服務(wù)的實(shí)現(xiàn)
這篇文章主要介紹了Go語言基于HTTP的內(nèi)存緩存服務(wù),本程序采用REST接口,支持設(shè)置(Set)、獲取(Get)和刪除(Del)這3個(gè)基本操作,同時(shí)還支持對(duì)緩存服務(wù)狀態(tài)進(jìn)行查詢,需要的朋友可以參考下2022-08-08
go語言實(shí)現(xiàn)字符串與其它類型轉(zhuǎn)換(strconv包)
strconv包是Go語言標(biāo)準(zhǔn)庫的一部分,主要提供字符串與基本數(shù)據(jù)類型之間的轉(zhuǎn)換功能,使用strconv包可以方便地在不同類型之間進(jìn)行轉(zhuǎn)換,滿足日常編程中的需求,感興趣的可以了解一下2024-10-10
Go語言對(duì)JSON數(shù)據(jù)進(jìn)行序列化和反序列化
這篇文章介紹了Go語言對(duì)JSON數(shù)據(jù)進(jìn)行序列化和反序列化的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
golang 如何用反射reflect操作結(jié)構(gòu)體
這篇文章主要介紹了golang 用反射reflect操作結(jié)構(gòu)體的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Go Struct結(jié)構(gòu)體的具體實(shí)現(xiàn)
Go語言中通過結(jié)構(gòu)體的內(nèi)嵌再配合接口比面向?qū)ο缶哂懈叩臄U(kuò)展性和靈活性,本文主要介紹了Go Struct結(jié)構(gòu)體的具體實(shí)現(xiàn),感興趣的可以了解一下2023-03-03

