給你一個非負整數(shù)數(shù)組 nums 桶略。在一步操作中盗飒,你必須:
選出一個正整數(shù) x ,x 需要小于或等于 nums 中 最小 的 非零 元素镇饮。
nums 中的每個正整數(shù)都減去 x。
返回使 nums 中所有元素都等于 0 需要的 最少 操作數(shù)箕母。
示例 1:
輸入:nums = [1,5,0,3,5]
輸出:3
解釋:
第一步操作:選出 x = 1 储藐,之后 nums = [0,4,0,2,4] 。
第二步操作:選出 x = 2 嘶是,之后 nums = [0,2,0,0,2] 钙勃。
第三步操作:選出 x = 2 ,之后 nums = [0,0,0,0,0] 俊啼。
示例 2:
輸入:nums = [0]
輸出:0
解釋:nums 中的每個元素都已經(jīng)是 0 肺缕,所以不需要執(zhí)行任何操作。
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 100
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/make-array-zero-by-subtracting-equal-amounts
菜雞的思路
'''
整體思路就是先用冒泡把最大數(shù)和最小的有效數(shù)求出來然后按照題目上面說的一個一個減去,在記錄計算的次數(shù)
'''
class Solution:
def minimumOperations(self, nums: list) -> int:
nums = list(set(nums))
if len(nums) == 1:
return 1
for i in range(len(nums) - 1):
for j in range(len(nums) -1):
if nums[j + 1] < nums[j]:
temp = nums[j]
nums[j] = nums[j + 1]
nums[j + 1] =temp
count = 0
nums = [item for item in nums if item != 0]
while 1:
mins = nums[0]
for i in range(len(nums)):
nums[i] = nums[i] - mins
nums = [item for item in nums if item >0]
if len(nums) == 1:
return count + 2
if nums[-1] == 0:
return count + 2
count = count + 1
if __name__ == '__main__':
a = Solution()
print(a.minimumOperations([2, 2, 99, 5, 6, 3,9,0]))
解出來之后就發(fā)現(xiàn)這就是在求有幾個不一樣的數(shù)同木,我的寫法完全就是畫蛇添足浮梢,我就先用set把重復的數(shù)去掉然后在把零去掉在求數(shù)組長度即可很簡單
class Solution:
def minimumOperations(self, nums: list) -> int:
nums = list(set(nums))
nums = [item for item in nums if item != 0]
return len(nums)
后面還看有人用一行代碼實現(xiàn)。彤路。
class Solution:
def minimumOperations(self, nums: list) -> int:
return len((set(nums)-{0}))
但是一行代碼的好像會慢些
1679069537367.png