leetcode —— 1217. 玩籌碼

數軸上放置了一些籌碼,每個籌碼的位置存在數組 chips 當中。

你可以對 任何籌碼 執行下面兩種操作之一(不限操作次數,0 次也可以):

  • 將第 i 個籌碼向左或者右移動 2 個單位,代價爲 0。
  • 將第 i 個籌碼向左或者右移動 1 個單位,代價爲 1。

最開始的時候,同一位置上也可能放着兩個或者更多的籌碼。

返回將所有籌碼移動到同一位置(任意位置)上所需要的最小代價。

示例 1:

輸入:chips = [1,2,3]
輸出:1
解釋:第二個籌碼移動到位置三的代價是 1,第一個籌碼移動到位置三的代價是 0,總代價爲 1。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/play-with-chips
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
————————————
解題思路:題目給定數組chips,chips中的元素代表每個籌碼的座標,所以如果chips中的某些元素值相同,則表示兩個籌碼在同一位置。

因爲距離爲偶數的兩個籌碼移動到同一位置時代價爲0,所以chips中所有座標值爲偶數的籌碼移動到同一個位置的代價爲0,chips中所有座標值爲奇數的籌碼移動到同一位置的代價爲0。

這樣在代價爲0的情況下得到兩組籌碼,假設座標爲偶數的籌碼個數爲n,座標爲奇數的籌碼個數爲m。

一個座標爲奇數的籌碼移動到座標爲偶數的位置的代價始終爲1,因爲奇數和偶數的差值爲奇數,奇數值爲偶數+1,因此代價始終爲1。

所以只需要返回n和m的較小值就可以得到最終的答案。

這裏給的標籤是貪心,沒理解貪心具體應用在哪裏,太菜了。

其Python代碼如下:

class Solution:
    def minCostToMoveChips(self, chips: List[int]) -> int:
        odd = 0  # 存儲座標爲奇數的籌碼個數
        even = 0  # 存儲座標爲偶數的籌碼個數
        for chip in chips:  # 遍歷數組,統計奇偶座標籌碼
            if chip%2 == 0:
                even += 1
            else:
                odd += 1
        return min(odd,even)  # 返回兩者中的較小值

代碼比較簡單,時間複雜度爲O(n),空間複雜度爲O(1)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章