前往
大廳
主題

LeetCode - 2593. Find Score of an Array After Marking All Elements 解題心得

Not In My Back Yard | 2024-02-19 12:00:08 | 巴幣 0 | 人氣 53

題目連結:


題目意譯:
你被給定一個陣列 nums,其由正整數組成。

一開始分數值 = 0。接著執行以下演算法:
    選擇陣列中沒有被標記的最小整數。如果有多個數值最小者,則選擇索引值最小者、
    將選出來的整數之數值加到分數中、
    將選出來的元素以及其兩個相鄰元素(如果存在)都標記起來。
    重複以上步驟直到陣列中所有元素都被標記起來。

回傳你執行以上演算法之後得到的分數值。

限制:
1 ≦ nums.length ≦ 10 ^ 5
1 ≦ nums[i] ≦ 10 ^ 6



範例測資:
範例 1:
輸入: nums = [2,1,3,4,5,2]
輸出: 7
解釋: 我們根據以下順序標記各個元素:
- 1 是最小的未標記元素,所以我們標記它以及其兩個相鄰元素:[2,1,3,4,5,2]。
- 2 是最小的未標記元素,所以我們標記它以及其左邊的相鄰元素:[2,1,3,4,5,2]。
- 4 是為一一個剩餘未標記元素,所以我們標記它:[2,1,3,4,5,2]。
我們的分數為 1 + 2 + 4 = 7。

範例 2:
輸入: nums = [2,3,5,1,3,2]
輸出: 5
解釋: 我們根據以下順序標記各個元素:
- 1 是最小的未標記元素,所以我們標記它以及其兩個相鄰元素:[2,3,5,1,3,2]。
- 2 是最小的未標記元素,由於有兩個 2,因此我們選最左側的那一個。所以我們標記位於索引值 0 的那個 2 以及其右邊的相鄰元素:[2,3,5,1,3,2]。
- 2 是為一一個剩餘未標記元素,所以我們標記它:[2,3,5,1,3,2]。
我們的分數為 1 + 2 + 2 = 5。


解題思維:
就是單純地用一個布林陣列(用來記錄陣列中的元素之標記狀況)以及一個優先佇列(Priority Queue)來取得當前最小元素(如題目所述,如果有多個最小則為索引值最小者)來模擬即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作