雙指標問題

2021-08-21 06:02:38 字數 2506 閱讀 1334

雙指標可用於多種情景之下,用於查詢陣列中滿足條件的數,

#coding=utf-8

###查詢三個數加起來等於0

def findthreesum(nums,target=0):

nums.sort()

res =

for left in xrange(nums.__len__()):

if left > 0 and nums[left] == nums[left-1]:

continue

if nums[left] > 0:

break

mid,right = left+1,nums.__len__()-1

target_less = target - nums[left]

while mid < right:

if nums[mid]+nums[right] == target_less:

mid+=1

right-=1

while mid < right and nums[mid] == nums[mid-1]:

mid+=1

while mid < right and nums[right] == nums[right+1]:

right-=1

elif nums[mid]+nums[right] > target_less:

right-=1

else:

mid+=1

return res

##查詢三個數與目標值最接近

def find3sumcloset(nums,target):

if nums.__len__() < 3:

return

nums.sort()

tmp,res = abs(target - nums[0] - nums[1] - nums[-1]),[nums[0],nums[1],nums[-1]]

for left in xrange(len(nums)-2):

mid,right = left+1,len(nums)-1

while mid < right:

if nums[mid]+nums[right]+nums[left] == target:

return target

elif nums[mid]+nums[right]+nums[left] < target:

targetless = abs(target - nums[mid]-nums[right]-nums[left])

if targetless < tmp:

tmp,res = targetless,[nums[mid],nums[right],nums[left]]

mid+=1

else:

targetless = abs(target - nums[mid] - nums[right] - nums[left])

if targetless < tmp:

tmp,res = targetless,[nums[mid],nums[right],nums[left]]

right-=1

return res

##

def find3sum(nums,first,target,res):

for second in xrange(first+1,len(nums)-2):

if second > first+1 and nums[second-1] == nums[second]:

continue

third,fourth = second+1,len(nums)-1

while thirdtarget:

fourth-=1

else:

third+=1

##查詢4個數等於目標值

def find4sum(nums,target):

if nums.__len__()<4:

return none

nums.sort()

res =

for fisrt in xrange(nums.__len__()-3):

if fisrt>0 and nums[fisrt] == nums[fisrt-1]: ###防止重複結果出現

continue

if nums[fisrt]*4>target: ##預判是否能夠滿足要求

return res

find3sum(nums,fisrt,target-nums[fisrt],res) ##呼叫查詢3個數等於目標值

return res

if __name__ == '__main__':

nums = [-1,-5,-5,-3,2,5,0,4]

# print(findthreesum(nums,0))

print(find4sum(nums,-7))

雙指標問題

雙指標一般有兩種case 1.快慢指標,一般排序需要使用快慢指標,快慢指標有兩種遊走方式 1.快指標一直往前,不歸位 2.慢指標移動時,快指標歸位。2.收尾指標,一般回文 對稱性判斷需要使用首尾指標 雙指標中,快慢指標問題 1.指標一快一慢,快指標按序遍歷陣列,慢指標記錄有效資料位置。2.當快指標找...

雙指標問題總結

左右指標的常見演算法 雙指標分為兩類,快慢指標和左右指標,前者主要解決鍊錶問題,後者主要解決陣列問題。環問題 public boolean hascycle listnode head listnode fast head listnode slow head while fast null fas...

26 27 雙指標問題

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被...