滑動視窗專題
1、滑動視窗要素
雙向指標,條件判斷,暴力求解
2、模板
3、例項
給定一個已按照升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。
函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。
說明:
返回的下標值(index1 和 index2)不是從零開始的。
你可以假設每個輸入只對應唯一的答案,而且你不可以重複使用相同的元素。
示例:輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]
解釋: 2 與 7 之和等於目標數 9 。因此 index1 = 1, index2 = 2 。
題解:雙向指標
一個指標指向開頭,一個指標指向結尾,如果a[l]+a[r]==target,返回[l+1,r+1];如果a[l]+a[r]<target,l+=1;如果a[l]+a[r]>target,r+=1
def f(a,target):
l,r=0,len(a)-1
while(l<r):
s=a[l]+a[r]
if(s==target):
return [l+1,r+1]
elif(s<target):
l+=1
else:
r-=1
return [-1,-1]
給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為一個有序陣列。
說明:
初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。
你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來儲存 nums2 中的元素。
示例:
輸入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3輸出:[1,2,2,3,5,6]
題解:
設定3個指標i,j,k,分別用i,j從後往前遍歷nums1,nums2,k指標記錄需要寫入的位置
如果nums1[i]>nums2[j],nums1[k]=nums1[i],i-=1;否則nums1[k]=nums2[j],j-=1;k-=1
def f(a,b,m,n):
i,j,k=m-1,n-1,m+n-1
while(i>=0 and j>=0):
if(a[i]>b[j]):
a[k]=a[i]
i-=1
else:
a[k]=b[j]
j-=1
k-=1
while(j>=0):
a[k]=b[j]
j-=1
k-=1
return a
給定一個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 O(1) 額外空間的條件下完成。
示例 1:
給定陣列 nums = [1,1,2],
函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。
你不需要考慮陣列中超出新長度後面的元素。
示例 2:給定 nums = [0,0,1,1,1,2,2,3,3,4],
函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4。
你不需要考慮陣列中超出新長度後面的元素。
說明:
為什麼返回數值是整數,但輸出的答案是陣列呢?
請注意,輸入陣列是以「引用」方式傳遞的,這意味著在函式裡修改輸入陣列對於呼叫者是可見的。
你可以想象內部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝
int len = removeDuplicates(nums);// 在函式裡修改輸入陣列對於呼叫者是可見的。
// 根據你的函式返回的長度, 它會列印出陣列中該長度範圍內的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}
題解:
設定兩個指標i,j;i記錄沒有重複的數的位置,j向前遍歷,直到遍歷到陣列的最後一個位置。
def f(a):
i,j=0,1
while(j<len(a)):
if(a[j]!=a[i]):
i+=1
a[i]=a[j]
j+=1
return i+1
nums = [0,0,1,1,1,2,2,3,3,4]
r=f(nums)
print(nums[0:r])
相關文章
- 滑動視窗問題總結
- 滑動視窗法——Leetcode例題LeetCode
- 滑動視窗最大值問題
- 力扣刷題-滑動視窗(字串)力扣字串
- 滑動視窗的最大值問題
- 細聊滑動視窗
- Sentinel 原理-滑動視窗
- mysql視窗函式中的滑動視窗MySql函式
- 滑動視窗法——子串相關問題
- 滑動視窗相關的題目總結
- Flink的滾動視窗、會話視窗、滑動視窗及其應用會話
- 滑動視窗演算法演算法
- 滑動視窗與雙指標指標
- WeetCode2滑動視窗系列
- TCP 流量控制-滑動視窗TCP
- 滑動視窗演算法思路演算法
- 滑動視窗的最大值
- Sentinel滑動視窗演算法演算法
- 「LeetCode Top100」之滑動視窗LeetCode
- 239. 滑動視窗最大值
- 滑動視窗(Sliding Window)技巧總結
- 自己實現一個滑動視窗
- 騰訊面試題-求滑動視窗的最大值面試題
- 氣球遊戲騰訊面試題滑動視窗解法遊戲面試題
- 演算法題:返回滑動視窗中的最大值演算法
- [Python手撕]滑動視窗最大值Python
- TCP的滑動視窗和擁塞控制TCP
- 滑動視窗演算法(Sliding Window Algorithm)演算法Go
- LeetCode 239. 滑動視窗最大值LeetCode
- [每日一題] 第二十六題:滑動視窗的最大值每日一題
- hot100-一刷-03滑動視窗(共2道題)
- 從2023濟南K學習滑動視窗中位數問題
- leetcode刷題記錄:演算法(三)滑動視窗演算法LeetCode演算法
- [Leetcode]雙項佇列解決滑動視窗最大值難題LeetCode佇列
- 滑動視窗最大值——棧與佇列佇列
- Hive實戰—時間滑動視窗計算Hive
- JZ-064-滑動視窗的最大值
- 【演算法】滑動視窗三步走演算法