993 陣列劃分 I

2022-02-15 03:22:42 字數 1647 閱讀 6557

中文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:

class

solution:

'''大致思路:

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:遞迴

class

solution:

"""@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 注意 你應該真正的...