每日程式設計(38)

2021-09-13 17:15:39 字數 1526 閱讀 8725

題目描述:

給定整數陣列 a,每次 move 操作將會選擇任意 a[i],並將其遞增 1。

返回使 a 中的每個值都是唯一的最少操作次數。

示例 1:

輸入:[1,2,2]

輸出:1

解釋:經過一次 move 操作,陣列將變為 [1, 2, 3]。

示例 2:

0 <= a.length <= 40000

0 <= a[i] < 40000

分析:這道題我一開始就像錯了,最近做他多最優解的題了,導致我還在想最少移動幾次,智障了,其實先移動誰,怎麼移動結果都是一樣的,想明白這道題就簡單了,先排序,相鄰兩個數之間進行比較,當遇到不滿足條件時,讓下乙個數變成前面的數加1,增加移動次數。

**:

func minincrementforunique(a int) int 

sort.ints(a)

for i:=1;i題目描述:

你的初始能量為 p,初始分數為 0,只有一包令牌。

令牌的值為 token[i],每個令牌最多只能使用一次,可能的兩種使用方法如下:

如果你至少有 token[i] 點能量,可以將令牌置為正面朝上,失去 token[i] 點能量,並得到 1 分。

如果我們至少有 1 分,可以將令牌置為反面朝上,獲得 token[i] 點能量,並失去 1 分。

在使用任意數量的令牌後,返回我們可以得到的最大分數。

示例 1:

輸入:tokens = [100], p = 50

輸出:0

示例 2:

輸入:tokens = [100,200], p = 150

輸出:1

示例 3:

輸入:tokens = [100,200,300,400], p = 200

輸出:2

tokens.length <= 1000

0 <= tokens[i] < 10000

0 <= p < 10000

分析:將tokens排序,因為我們一開始應該拿出最小的,為什麼,首先先確定能不能得分,如果最小的都比p大,直接返回0就可以,不可能得分,其次,如果小,我們就要先得一分,然後往後走,及主要記錄位置,等到不能得分的時候,也就是p太小的,這時候就要考慮是不是要失去乙份換能量,要考慮兩件事情,換能量之後是不是能得分,跟誰換,當然是根最大的換,都要失去乙份,就要買乙個最大的嘛,然後判斷能不能得分,不能得分就不換,直接返回分值。

**:func bagoftokensscore(tokens int, p int) int

n:=len(tokens)

if n==0

sort.ints(tokens)

if n>=1 && tokens[0]>p

score:=0

i:=0

j:=n-1

for i<=jelse if tokens[i]>p && score>0 && i!=j else

j--}else

} return score

}

這個題之前已經寫過了,可以看一下三十

每日一題(38)

輸入描述 輸入有多組資料。每組資料報含兩個字串a b,代表a盒與b盒中的桌球,每個桌球用乙個大寫字母表示,即相同型別的桌球為相同的大寫字母。字串長度不大於10000。輸出描述 每一組輸入對應一行輸出 如果b盒中所有球的型別在a中都有,並且每種球的數量都不大於a,則輸出 yes 否則輸出 no 示例1...

每日演算法 day 38

那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.3.24 如果 k n 那麼就要思考怎樣去選擇了 1.k 如果是偶數的話,選出來的...

38 併發程式設計

一 多道技術 1.1 必備知識點 併發 看起來像同時執行的就可以稱之為併發 並行 真正意義上的同時執行 注 並行肯定算,單核的計算機肯定不能實現並行,但是可以實現併發!補充 我們直接假設單核就是乙個核,幹活的就乙個人,不要考慮cpu裡面的核心數 1.2 多道技術 節省多個程式執行的總耗時 1.2.1...