mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
docs(content): revamp sliding-window examples and purge empty appendix pages
This commit is contained in:
1 parent
937266b629
commit
0e9e06eb8d
38 files changed
+39
-419
No files matched your search
@@ -48,18 +48,14 @@ The window size never changes. The main task is updating the window state effici
|
||||
|
||||
|
||||
```python
|
||||
def fixed_window(nums, k):
|
||||
window_sum = 0
|
||||
best = float('-inf')
|
||||
|
||||
for right in range(len(nums)):
|
||||
window_sum += nums[right] # add the new element
|
||||
|
||||
if right >= k - 1: # window is full
|
||||
best = max(best, window_sum) # record answer
|
||||
window_sum -= nums[right - k + 1] # remove the oldest element
|
||||
|
||||
return best
|
||||
def sliding_window_fixed(input, window_size):
|
||||
ans = window = input[0:window_size]
|
||||
for right in range(window_size, len(input)):
|
||||
left = right - window_size
|
||||
remove input[left] from window
|
||||
append input[right] to window
|
||||
ans = optimal(ans, window)
|
||||
return ans
|
||||
```
|
||||
|
||||
<Steps>
|
||||
@@ -87,24 +83,43 @@ Here the window expands until invalid, then shrinks until valid again.
|
||||
|
||||
</Frame>
|
||||
|
||||
|
||||
<Tabs inline>
|
||||
<Tab title="Longest Window">
|
||||
|
||||
```python
|
||||
def flexible_window(nums, target):
|
||||
def sliding_window_flexible_longest(input):
|
||||
initialize window, ans
|
||||
left = 0
|
||||
window_sum = 0
|
||||
best = 0
|
||||
|
||||
for right in range(len(nums)):
|
||||
window_sum += nums[right] # grow the window
|
||||
|
||||
while window_sum > target: # window is invalid
|
||||
window_sum -= nums[left] # shrink from the left
|
||||
for right in range(len(input)):
|
||||
append input[right] to window
|
||||
while invalid(window): # update left until window is valid again
|
||||
remove input[left] from window
|
||||
left += 1
|
||||
ans = max(ans, window) # window is guaranteed to be valid here
|
||||
return ans
|
||||
|
||||
best = max(best, right - left + 1) # window is valid, record answer
|
||||
|
||||
return best
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab title="Shortest Window">
|
||||
|
||||
```python
|
||||
def sliding_window_flexible_shortest(input):
|
||||
initialize window, ans
|
||||
left = 0
|
||||
for right in range(len(input)):
|
||||
append input[right] to window
|
||||
while valid(window):
|
||||
ans = min(ans, window) # window is guaranteed to be valid here
|
||||
remove input[left] from window
|
||||
left += 1
|
||||
return ans
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Steps>
|
||||
<Step title="">
|
||||
Add `nums[right]` to the window.
|
||||
@@ -119,26 +134,6 @@ def flexible_window(nums, target):
|
||||
|
||||
---
|
||||
|
||||
For "shortest window" problems, swap the logic: use `while` for the *valid* case, record the answer inside the loop, then shrink.
|
||||
|
||||
```python
|
||||
def shortest_valid_window(nums, target):
|
||||
left = 0
|
||||
window_sum = 0
|
||||
best = float('inf')
|
||||
|
||||
for right in range(len(nums)):
|
||||
window_sum += nums[right]
|
||||
|
||||
while window_sum >= target: # window is valid
|
||||
best = min(best, right - left + 1) # record, then try to shrink
|
||||
window_sum -= nums[left]
|
||||
left += 1
|
||||
|
||||
return best if best != float('inf') else 0
|
||||
|
||||
```
|
||||
|
||||
## 3. Frequency-tracking windows
|
||||
|
||||
:::tip
|
||||
|
||||
Reference in new issue
Block a user