六 問題 2 sum問題

2022-07-10 03:57:11 字數 1733 閱讀 9568

兩數之和問題:給定乙個列表和乙個整數,從列表中找到兩個數,使得兩數之和等於給定的數,返回兩個數的下標。題目保證有且只有一組解

def two_sum_1(nums, target):

"""時間複雜度:o(n*n)

:param nums:

:param target:

:return:

"""n = len(nums)

for i in range(n - 1):

n1 = nums[i]

for j in range(i + 1, n):

n2 = nums[j]

if n1 + n2 == target:

return i, j

def two_sum_2(nums, target):

"""時間複雜度:o(n*k),k為python查詢某個元素是否在列表內的時間複雜度

:param nums:

:param target:

:return:

"""for n1 in nums:

n2 = target - n1

if n2 in nums: # 判斷n2是否在列表內

if n1 != n2:

return nums.index(n1), nums.index(n2)

else: # n1和n2重複

return nums.index(n1), nums.index(n2, nums.index(n1) + 1)

def search(li, val):

"""二分查詢方法

:param li:

:param val:

:return:

"""left = 0

right = len(li) - 1

while left <= right:

mid = (left + right) // 2

if val == li[mid][0]:

return mid

elif val > li[mid][0]:

left = mid + 1

elif val < li[mid][0]:

right = mid - 1

else:

return -1

@cal_time

def two_sum_3(nums, target):

"""時間複雜度:o(n*logn)

:param nums:

:param target:

:return:

"""nums_ = [[num, index] for index, num in enumerate(nums)]

nums_.sort(key=lambda x: x[0]) # 按值排序

for i in range(len(nums_)):

n1 = nums_[i][0]

n2 = target - n1

j = search(nums_, n2) # 二分法判斷n2是否在列表內

if j >= 0:

if n1 != n2:

return nums_[i][1], nums_[j][1]

else: # n1和n2重複

return nums.index(n1), nums.index(n2, nums.index(n1) + 1)

swift演算法 2sum 演算法

題目描述 給出乙個整數陣列和乙個目標值,判斷陣列中是否有兩個數之和等於目標值 1 粗暴的方法 每次選中乙個數,然後遍歷整個陣列,判斷是否有另乙個數使兩者之和為target 時間複雜度 o n 2 2 利用集合可以優化時間複雜度 思路 在遍歷陣列的過程中,用集合每次儲存當前值。假如集合中已經有乙個數等...

陣列 sum問題

題目一 輸出有序陣列a中,和為s的兩個數。如有多個,輸出乘積最小的兩個。思路 將兩個指標分別指向首尾,如果和與指定值相等,則返回 如和大於指定值,則右指標向左移動 如和小於指定值,則左指標向右移動。public arraylistfindnumberswithsum int array,int su...

六數碼問題

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述現有一兩行三列的 如下 a b c d e f 把1 2 3 4 5 6六個數字分別填入a b c d e f格仔中,每個格仔乙個數字且各不相同。每種不同的填法稱為一種布局。如下 1 3 5 2 4 6 布局12 5 6 4 3...