雙指標演算法模板

2021-09-29 11:27:49 字數 2797 閱讀 3227

雙指標的鼻祖題 —— 兩數之和 twosum鍊錶上的快慢指標演算法

快速排序 & 歸併排序

• 幾乎所有 twosum變種 • partition

• quick select • 分成兩個部分 • 分成三個部分

• 一些你沒聽過的(但是面試會考的)排序演算法

1、翻轉字串

def reverse(s):

left, right = 0, len(s)-1

while left < right:

s[left], s[right] = s[right], s[left]

left += 1

right -= 1

2、判斷回文串

def ispalindrome(s):

i, j = 0, len(s)-1

while i < j:

if s[i] != s[j]:

return false

i += 1

j -= 1

return true

同向雙指標的問題,是指兩根指標都從頭出發,朝著同乙個方向前進。

通常解決的問題:

陣列去重問題 remove duplicates in an array

滑動視窗問題 window sum

兩數之差問題 two difference

鍊錶中點問題 middle of linked list

帶環鍊錶問題 linked list cycle

給你乙個陣列,要求去除重複的元素後,將不重複的元素挪到陣列前段,並返回不重複的元素個數。

def deduplication(nums):

n = len(nums)

if n == 0:

return 0

nums.sort()

result = 1

for i in range(1, n):

if nums[i - 1] != nums[i]:

nums[result] = nums[i]

result += 1

return result

同向雙指標模板

nums.sort()

target = abs(target)

j = 1

for i in range(len(nums)):

while j < len(nums) and nums[j]-nums[i] < target:

j += 1

if nums[j]-nums[i] == target:

# 找到答案

給定乙個整數陣列,找到兩個數的等於目標值。index1必須小於index2。注意返回的index1和index2不是 0-based。

def twosum7(nums, target):

# write your code here

target = abs(target)

nums2 = [(n, i) for i,n in enumerate(nums)]

nums2.sort(key=lambda x: x[0])

result =

j = 1

for i in range(len(nums2)):

while j < len(nums2) and nums2[j][0]-nums2[i][0] < target:

j += 1

if nums2[j][0]-nums2[i][0] == target:

if i != j:

result = (nums2[i][1]+1, nums2[j][1]+1)

break

if result[0] > result[1]:

return [result[1], result[0]]

return result

def middlenode(self, head):

# write your code here

slow, fast = head, head

while fast and fast.next and fast.next.next:

slow = slow.next

fast = fast.next.next

return slow

def hascycle(self, head):

if not head:

return false

slow = head

fast = head

while fast and fast.next:

slow = slow.next

fast = fast.next.next

if slow == fast:

return true

return false

參考:

雙指標演算法

雙指標演算法模板 for int i 0,j 0 i n i 常見問題分類 1 對於乙個序列,用兩個指標維護一段區間 2 對於兩個序列,維護某種次序,比如歸併排序中合併兩個有序序列的操作 例題1 最長連續不重複子序列 給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。輸...

雙指標演算法

title 雙指標演算法 date 2019 05 26 23 45 09 tags 雙指標演算法 雙指標演算法 主要是兩大類 核心思想 將乙個 o n 2 o n 2 o n2 的演算法 優化成 o n o n o n 的for int i 0 i for int j 0 j for i 0,j ...

雙指標演算法

一般雙指標的模板 雙指標演算法的思考方式 先想出暴力做法,再觀察是否存在單調性。傳統的演算法需列舉兩個指標的組合,兩個for迴圈時間複雜度為o n 2 雙指標演算法會使時間複雜度變為o n 給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。輸入格式 第一行包含整數n。第...