LeetCode基礎算法題第179篇:將每個元素替換為右側最大元素

2020-09-19 吾是我師


技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。





LeetCode 1299. 將每個元素替換為右側最大元素(Replace Elements with Greatest Element on Right Side)

問題描述:

給你一個數組 arr ,請你將每個元素用它右邊最大的元素替換,如果是最後一個元素,用 -1 替換。

完成所有替換操作後,請你返回這個數組。

注:

  • 1 <= arr.length <= 10^4;
  • 1 <= arr[i] <= 10^5;

示例:

C語言實現:

先要說明的是,從C語言給定的函數注釋來看,返回數組是一個新數組,即不能修改原數組arr,那麼後面java和python的實現,我們都會返回一個新數組。

按照題目的描述,顯然從右到左替換最為方便。

我們先定義返回數組res,它的長度和arr是一樣的,然後定義變量m用於保存右側最大值,它的初始值為arr的最後一個元素。

首先,無論如何res最右邊的元素都會是-1,然後倒數第二個元素是arr的最後兩個元素最大的那個,所以我們的做法是直接從arr倒數第二個元素開始向左遍歷。

對於遍歷中的每一個元素arr[i],先後做如下操作:

  1. 首先對於res[i],用當前得到的最大值m賦值;
  2. 然後重新計算最大值m, m = max(arr[i], m);

如此進行下去,一直到遍歷結束。



整個過程很簡單,代碼如下:

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

Python語言實現:

Python 的實現和C語言的實現一致,不再撰述。

代碼如下:

相關焦點

  • LeetCode基礎算法題第183篇:一維數組的重新洗牌
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和精力有限,其他語言的實現有興趣的朋友請自己嘗試。
  • LeetCode基礎算法題第180篇:最大的69數
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。最大的69數(Maximum 69 Number)問題描述:給定一個僅由數字6和9組成的正整數num。你可以將6變成9或者9變成6,如果最多只允許改變一位,那麼num最大能變成幾?
  • LeetCode基礎算法題第182篇:一維數組的運行總和
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。我們將數組的運行總和定義為 runningSum[i] = sum(nums[0]…nums[i])。返回的運行總和nums。
  • LeetCode基礎算法題第184篇:好搭檔的數量
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。對於其中的兩個元素nums[i]和nums[j],如果nums[i] == nums[j] 並且 i < j 則稱呼它們為&34;。返回nums中&34;的數量。
  • LeetCode基礎算法題第188篇:多少個數字小於當前數字
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。LeetCode 1365.多少個數字小於當前數字(How Many Numbers Are Smaller Than the Current Number)問題描述:給定數組nums,對於每個nums[i], 找出nums中有多少個元素小於它
  • 「Leetcode簡潔筆記」第27題:移除元素
    這也是簡單呢,[翻白眼](感覺出題官有點水,怎麼跟上一題那麼像)本文答案參考自leetcode官方題解。又是原地修改。【方法1】同樣是快慢指針(跟上一題很像,但代碼編寫順序略有不同)快指針每次都向前走慢指針進行判斷:如果快指針指向的元素與慢指針指向的元素 相等,則什麼也不做(慢指針不動),直接進入下一輪循環
  • leetcode-第27題-移除元素
    //給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後數組的新長度。 // 不要使用額外的數組空間,你必須僅使用 O(1) 額外空間並 原地 修改輸入數組。// 元素的順序可以改變。
  • LeetCode基礎算法題第186篇:一維數組逐次異或的結果
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。返回的所有元素的按順序逐次XOR的結果。那麼生成的 nums = [1], 只有一個元素,不存在異或操作,最後要返回的結果res = 1。如果 n = 4, start = 1。那麼生成的 nums = [1,3,5,7],最後要返回的結果res = 1^3^5^7。即先計算出1^3的結果,然後拿這個結果再^5,得到另一個結果再^7。根據這兩個例子,我們可以將res初始化為nums[0],即start。
  • LeetCode基礎算法題第170篇:玩籌碼
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level玩籌碼(Play with Chips)問題描述:給定一些籌碼,數組chips用來存放每個籌碼的位置,第i個籌碼的位置存放在chips[i]。你可以對每個籌碼執行如下任何一種操作,次數不限制,可以0次:將第i個籌碼向左或向右移動2個單位,代價為0。
  • LeetCode基礎算法題第178篇:和為零的N個唯一整數
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。和為零的N個唯一整數(Find N Unique Integers Sum up to Zero)問題描述:給你一個整數 n,請你返回 任意 一個由 n 個 各不相同 的整數組成的數組,並且這 n 個數相加和為 0 。
  • Leetcode每日一題378. 找出有序矩陣中第K小的元素
    對於leetcode編程題,想要取得最優解,一定要充分利用題目中的條件。先看題目給的矩陣性質:每行每列均按升序排列很容易想到的結論:n * n 的矩陣中 matrix[0][0] 是最小值,matrix[n - 1][n - 1] 是最大值正向思維:直接排序,找到第k小的元素;逆向思維:對於矩陣中每個元素 matrix[i][j],判斷小於等於該值的元素總個數 sum,如果 sum
  • LeetCode基礎算法題第175篇:求最大子數組的和
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。如果我們從左向右查找,我們定義一個變量t用於保存子數組的和,按照要求,t在某一時刻總會有如下特點:如果t和下一個元素i的和比t大,那麼t+i一定比原來的t更有資格成為局部最優解;反之,如果t+i<=t,那麼t一定比t+i更有資格成為局部最優解;如果將t初始化為0,那麼通過對nums的遍歷,就會出現len(nums
  • LeetCode基礎算法題第172篇:數字乘積與和的差
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。示例:C語言實現:這道題同樣十分簡單求n的所有數字的乘積與和的差,重點就是在算法中剝離出n中的每個數字。我們知道這個方法很簡單,通過不斷的對n取10的餘數,就可以不斷的把這些數字剝離出來。所以先定義兩個變量acc和sum分別賦值為1和0,因此acc是統計積的而sum是統計和的。然後通過循環遍歷剝離n中的每個數字,然後計算acc和sum。最後返回acc和sum的差即可。
  • LeetCode基礎算法題第187篇:解壓縮行程編碼(RLE)列表
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和精力有限,其他語言的實現有興趣的朋友請自己嘗試。
  • LeetCode基礎算法題第185篇:糖果數量最多的孩子
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。糖果數量最多的孩子(Kids With the Greatest Number of Candies)問題描述:給定一個數組candies和一個整數extraCandies,其中candies[i]代表第i個孩子擁有的糖果數量。對於每個孩子。
  • LeetCode基礎算法題第173篇:將連結列表中的二進位數轉換為整數
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。將連結列表中的二進位數轉換為整數(Convert Binary Number in a Linked List to Integer)問題描述:給定一個是單連結列表的頭節點head。鍊表中每個節點的值為0或1。整個鍊表包含數字是一個十進位整數的二進位表示形式。返回該十進位整數。
  • LeetCode基礎算法題第176篇:找出所有位數為偶數的數字
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。找出所有位數為偶數的數字(Find Numbers with Even Number of Digits)問題描述:給定一個整數數組nums,返回其中數字個數為偶數的整數。
  • LeetCode基礎算法題第171篇:分割平衡字符串中的字符串
    技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。給定一個平衡的字符串 s,需要將其拆分為最大數量的平衡子字符串。返回可以拆分的平衡字符串的最大數量。
  • leetcode專項刷題(數組)-子數組最大平均數/最大子序和/數組的度
    本文將繼續分享leetcode上數組專項的刷題,也是基礎題,但是屬於必須會的那種範疇。是關於基礎數組專項的分享最後一文,給自己留個底。算法都是基於python。子數組最大平均數 I問題描述給定n個整數,找出平均數最大且長度為k的連續子數組,並輸出該最大平均數輸入:[1,12,-5,-6,50,3], k = 4輸出:12.75
  • 數組:就移除個元素很難麼?
    元素的順序可以改變。你不需要考慮數組中超出新長度後面的元素。示例 1:給定 nums = [3,2,2,3], val = 3,函數應該返回新的長度 2, 並且 nums 中的前兩個元素均為 2。你不需要考慮數組中超出新長度後面的元素。