劍指offer 雙指標

2021-10-24 04:31:15 字數 2479 閱讀 8101

雙指標

#21.py

#輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。

class

solution

:def

exchange

(self, nums: list[

int])-

> list[

int]

: j=

len(nums)-1

i=0while iif nums[i]%2

==0:if nums[j]%2

==0: j=j-

1continue

else

: nums[i]

,nums[j]

=nums[j]

,nums[i]

i=i+

1return nums

class

solution

:def

findnumberin2darray

(self, matrix: list[list[

int]

], target:

int)

->

bool:if

len(matrix)==0

:return

false

i=0 j=

len(matrix[0]

)-1while i<

len(matrix)

and j>=0:

if matrix[i]

[j]i+=

1elif matrix[i]

[j]>target:

j-=1else

:return

true

return

false

#57.py

```python3

# 輸入乙個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。

# 序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。

# 示例 1:

# 輸入:target = 9

# 輸出:[[2,3,4],[4,5]]

# 示例 2:

# 輸入:target = 15

# 輸出:[[1,2,3,4,5],[4,5,6],[7,8]]

class

solution

:def

twosum

(self, nums: list[

int]

, target:

int)

-> list[

int]

: i=

0 j=

len(nums)-1

while iif nums[i]

+nums[j]

>target:

j-=1elif nums[i]

+nums[j]

i+=1else

:return

[nums[i]

,nums[j]

]

#57_2.py

# 輸入乙個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。

# 序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。

# 示例 1:

# 輸入:target = 9

# 輸出:[[2,3,4],[4,5]]

# 示例 2:

# 輸入:target = 15

# 輸出:[[1,2,3,4,5],[4,5,6],[7,8]]

class

solution

:def

findcontinuoussequence

(self, target:

int)

-> list[list[

int]]:

nums=

[i for i in

range(1

,target+1)

] res=

i=target//

2 start=

2while i>=

0and start<=target//2+

1:ifsum

(nums[i:i+start]

)==target:

) i=i-

1 start+=1if

sum(nums[i:i+start]

)>target:

i=i-1if

sum(nums[i:i+start]

)start+=

1return

sorted

(res)

劍指offer 雙指標專題

很經典的雙指標題目 讓指標pt 1 先走k步,pt 2出發。這樣當pt 1達到末尾時,pt 2剛好走到倒數第k個。definition for singly linked list.class listnode def init self,x self.val x self.next none cl...

劍指offer 雙棧形成佇列

class myqueue public void push int x stack1.push x 要考慮stack2的元素還沒有都取出去,就又新push新的元素的情況 public intpop return stack2.pop 這裡要考慮的情況是,如果stack2的資料如果都取出去了,然後又...

劍指offer 雙指標 58 I 翻轉單詞順序

時間複雜度 o n 空間複雜度 o 1 class solution reverse s.begin s.end 去除首尾的空格 int k 0 while k s.size s k k int j s.size 1 while j 0 s j j return s.substr k,j k 1 自...