list1[1,3,5,7,9]
for index, num in enumerate(list1):
print('index:',i , 'num:',num)
def threeSum(self, nums):
# 先將輸入數列排序後呈 [-4,-1,-1,0,1,2]
nums = sorted(nums)
length = len(nums)
sol_list = set()
if length < 3:
return sol_list
for index in range(length):
pivot_index = index
if nums[pivot_index] > 0: # 不可能相加 = 0
return sol_list
if index >=1 and nums[index-1] == nums[index]:
continue
# 設定其餘數列相加pivot 為 0
target = 0 - nums[index]
target_map = {} # 利用dict 去尋找有無適合值
for pivot_index in range(pivot_index+1,length):
if target_map.__contains__(target-nums[pivot_index]):
#如果dict內有key 符合 target-nums[pivot_index]
#代表條件符合新增於ans_list
sol_list.add((nums[index],
target-nums[pivot_index],nums[pivot_index]))
else: # 紀錄值在target_map內利後續查詢
target_map[nums[pivot_index]] = pivot_index
return sol_list
def threeSum(self, nums):
# 先將輸入數列排序後呈 [-4,-1,-1,0,1,2]
nums = sorted(nums)
length = len(nums)
sol_list = set()
if length < 3:
return sol_list
for index in range(length-2):
# 因為是已經排序過,所以nums[pivot_index] > 0
# 就不用繼續
if nums[index] > 0:
break
if index >=1 and nums[index-1] == nums[index]:
continue
# 想法為有兩個指標 l , r
# 當 sum 過大 r-1,sum過小 l+1
l = index + 1 # 左邊index
r = length - 1 # 右邊index
while l < r: # 以 index 為主key 去嘗試 l & r 的值
sum = nums[index] + nums[l]+ nums[r]
if sum < 0 : # 代表 left的值負太多 往右移
l += 1
elif sum > 0: # 代表 right 的值正太多 往左移
r -= 1
else:
sol_list.add((nums[index],nums[l],nums[r]))
l+=1; r-=1
return sol_list
LeetCode
three sum
two pointer
My Solution O(n^2) def twoSum(self, nums:[int], target: int): # 以 for 寫兩層巢狀 for 去尋找 第一層數字 = i length = len(nums) ans = [int]*2 for i in range(length): # 1.target_num = target 數字 減去 第一層巢狀 for 的值 target_num = target - nums[i] ans[0] = i # 2-1. 如果其數字 等於第一層巢狀 for 值 則 跳下一個數字
Jan 13, 2022[TOC] 台泥 1101 亞泥 1102 食品(傳產) 大成(飼料47%, 肉品20%) 1210 統一 1216 泰山 1218
Jul 19, 2020Contents [TOC] Hot Key in codepen Ctrl+D 可選取同一個字詞 (先用滑鼠選) Ctrl+/ comment Ctrl+L whole line select Tab indent Shift+Tab cancel indent
Feb 28, 2020or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up