中文english
給乙個有 2n 個整數的陣列,你的任務是把這些整數分成 n 組,如(a1, b1),(a2, b2),...,(an, bn)。並且使得 i 從 1 到 n 的 min(ai, bi)之和盡可能的大。
樣例1:
輸入: [1,4,3,2]
輸出: 4
解釋: n 是 2, 最大的數對和為 4 = min(1, 2) + min(3, 4).
樣例 2:
輸入: [5,6]
輸出: 5
解釋: n 是 1, 最大的數對和為 5 = min(5, 6) .
n 是乙個正整數,且範圍為 [1, 10000].
陣列中的元素範圍為[-10000, 10000]。
輸入測試資料 (每行乙個引數)如何理解測試資料?
寫法1:
classsolution:
'''大致思路:
1.陣列需要分為n個子陣列,那麼就需要每次取出最小值出來,放到乙個新的子陣列裡面,原陣列移除掉,一直到原陣列為空的時候跳出
'''def arraypairsum(self,nums):
result = 0
flag =false
while len(nums) != 0
:
if flag ==false:
min_num =min(nums)
nums.remove(min_num)
flag =true
#此時已經是開始去第二個數值
else
: flag =false
result +=min_num
nums.remove(min(nums))
return result
寫法2:遞迴
classsolution:
"""@param nums: an array
@return: the sum of min(ai, bi)
for all i from
1to n
"""'''
大致思路:
遞迴思想
'''def __init__(self):
self.res = 0
self.flag =false
self.min_num = 0
def arraypairsum(self,nums):
if nums ==:
return
self.res
#每次取出最小值
if self.flag ==false:
self.min_num =min(nums)
nums.remove(self.min_num)
self.flag =true
else
: self.res +=self.min_num
self.flag =false
nums.remove(min(nums))
return self.arraypairsum(nums)
注:lintcode未通過,**執行時間超過限制
集合劃分問題I
time limit 1000ms memory limit 32768k total submit 174accepted 64問題描述 n個元素的集合可以劃分為若干個非空子集。例如,當n 4 時,集合可以劃分為15 個不同的非空子集如下 演算法設計 給定正整數n,計算出n個元素的集合可以劃分為多...
LintCode 陣列劃分
給出乙個整數陣列nums和乙個整數k。劃分陣列 即移動陣列nums中的元素 使得 返回陣列劃分的位置,即陣列中第乙個位置i,滿足nums i 大於等於k。您在真實的面試中是否遇到過這個題?yes 樣例給出陣列nums 3,2,2,1 和 k 2,返回 1 注意你應該真正的劃分陣列nums,而不僅僅只...
LintCode 陣列劃分
陣列劃分 給出乙個整數陣列nums和乙個整數k。劃分陣列 即移動陣列nums中的元素 使得 所有小於k的元素移到左邊 所有大於等於k的元素移到右邊 返回陣列劃分的位置,即陣列中第乙個位置i,滿足nums i 大於等於k。樣例 給出陣列nums 3,2,2,1 和 k 2,返回 1 注意 你應該真正的...