難度:簡單
給你乙個整數 n,請你幫忙計算並返回該整數「各位數字之積」與「各位數字之和」的差。
示例 1:
輸入:n = 234示例 2:輸出:15
解釋:各位數之積 = 2 * 3 * 4 = 24
各位數之和 = 2 + 3 + 4 = 9
結果 = 24 - 9 = 15
輸入:n = 4421解決方案:輸出:21
解釋:各位數之積 = 4 * 4 * 2 * 1 = 32
各位數之和 = 4 + 4 + 2 + 1 = 11
結果 = 32 - 11 = 21
class
solution
:def
subtractproductandsum
(self, n:
int)
->
int:
multi =
1 add =
0 n_str =
str(n)
for i in n_str:
multi = multi *
int(i)
add +=
int(i)
return multi-add
執行用時
記憶體消耗
語言32 ms
12.7 mb
python3
難度:中等
有 n 位使用者參加活動,他們的 id 從 0 到 n - 1,每位使用者都 恰好 屬於某一使用者組。給你乙個長度為 n 的陣列 groupsizes,其中包含每位使用者所處的使用者組的大小,請你返回使用者分組情況(存在的使用者組以及每個組中使用者的 id)。
你可以任何順序返回解決方案,id 的順序也不受限制。此外,題目給出的資料保證至少存在一種解決方案。
示例 1:
輸入:groupsizes = [3,3,3,3,3,1,3]示例 2:輸出:[[5],[0,1,2],[3,4,6]]
解釋:其他可能的解決方案有 [[2,1,6],[5],[0,4,3]] 和 [[5],[0,6,2],[4,3,1]]。
輸入:groupsizes = [2,1,3,3,3,2]解決方案:輸出:[[1],[0,5],[2,3,4]]
class
solution
:def
groupthepeople
(self, groupsizes: list[
int])-
> list[list[
int]]:
ans =
res =
dict()
for i in
range
(len
(groupsizes)):
ifnot res.get(groupsizes[i]):
res[groupsizes[i]]=
[i]else
: res[groupsizes[i]
]if res.get(groupsizes[i]
)and
len(res[groupsizes[i]])
== groupsizes[i]:)
)return ans
執行用時
記憶體消耗
語言88 ms
12.8 mb
python3
難度:中等
給你乙個整數陣列 nums 和乙個正整數 threshold ,你需要選擇乙個正整數作為除數,然後將陣列裡每個數都除以它,並對除法結果求和。
請你找出能夠使上述結果小於等於閾值 threshold 的除數中 最小 的那個。
每個數除以除數後都向上取整,比方說 7/3 = 3 , 10/2 = 5 。
題目保證一定有解。
示例 1:
輸入:nums = [1,2,5,9], threshold = 6示例 2:輸出:5
解釋:如果除數為 1 ,我們可以得到和為 17 (1+2+5+9)。
如果除數為 4 ,我們可以得到和為 7 (1+1+2+3) 。如果除數為 5 ,和為 5 (1+1+1+2)。
輸入:nums = [2,3,5,7,11], threshold = 11示例 3:輸出:3
輸入:nums = [19], threshold = 5解決方案1:輸出:4
import math
class
solution
:def
computer_sum
(self, nums, d)
: ans =
0for i in nums:
ans += math.ceil(i / d)
# print(ans)
return ans
defsmallestdivisor
(self, nums, threshold)
: max_n =
max(nums)
min_n =
1 mid =
(max_n + min_n)//2
while mid != max_n and mid != min_n:
if self.computer_sum(nums, mid)
<= threshold:
if self.computer_sum(nums, mid-1)
> threshold:
return mid
max_n = mid
mid =
(max_n + min_n)//2
else
: min_n = mid
mid =
(min_n + max_n)//2
return mid
執行用時
記憶體消耗
語言676 ms
18.2 mb
python3
解決方案2(來自網路,簡化了上個方法):
class
solution
:def
smallestdivisor
(self, nums: list[
int]
, threshold:
int)
->
int:
""" 簡單二分
時間複雜度: nums.length*log(max(nums)) = 17*5*10^4
:param nums:
:param threshold:
:return:
"""l, r =1,
max(nums)
while
(l < r)
: mid =
(l + r)
>>
1# 小於等於閾值, 說明 答案不是在mid的左邊就是midif(
sum(math.ceil(x/mid)
for x in nums)
<= threshold)
: r = mid
# 大於閾值, 答案在mid右邊
else
: l = mid +
1return r
執行用時
記憶體消耗
語言512 ms
18.2 mb
python3
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...
python二分法查詢 Python 二分法查詢
二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...
第k大數 二分法
時間限制 10 sec 記憶體限制 128 mb 有兩個序列a,b,它們的長度分別為n和m,那麼將兩個序列中的元素對應相乘後得到的n m個元素從大到小排列後的第k個元素是什麼?輸入的第一行為乙個正整數t t 10 代表一共有t組測試資料。每組測試資料的第一行有三個正整數n,m和k 1 n,m 100...