題目描述:
給定整數陣列 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...