vault backup: 2022-09-04 15:03:27
This commit is contained in:
parent
64455a46e4
commit
5d97fd5b35
4
.obsidian/core-plugins.json
vendored
4
.obsidian/core-plugins.json
vendored
|
@ -12,9 +12,7 @@
|
||||||
"command-palette",
|
"command-palette",
|
||||||
"editor-status",
|
"editor-status",
|
||||||
"starred",
|
"starred",
|
||||||
"markdown-importer",
|
|
||||||
"random-note",
|
"random-note",
|
||||||
"outline",
|
"outline",
|
||||||
"word-count",
|
"word-count"
|
||||||
"file-recovery"
|
|
||||||
]
|
]
|
2
.obsidian/graph.json
vendored
2
.obsidian/graph.json
vendored
|
@ -39,6 +39,6 @@
|
||||||
"repelStrength": 10,
|
"repelStrength": 10,
|
||||||
"linkStrength": 1,
|
"linkStrength": 1,
|
||||||
"linkDistance": 250,
|
"linkDistance": 250,
|
||||||
"scale": 0.9328381822372834,
|
"scale": 0.7878344292720599,
|
||||||
"close": true
|
"close": true
|
||||||
}
|
}
|
2
.obsidian/plugins/obsidian-git/data.json
vendored
2
.obsidian/plugins/obsidian-git/data.json
vendored
|
@ -19,6 +19,6 @@
|
||||||
"refreshSourceControl": true,
|
"refreshSourceControl": true,
|
||||||
"basePath": "",
|
"basePath": "",
|
||||||
"differentIntervalCommitAndPush": true,
|
"differentIntervalCommitAndPush": true,
|
||||||
"changedFilesInStatusBar": false,
|
"changedFilesInStatusBar": true,
|
||||||
"username": ""
|
"username": ""
|
||||||
}
|
}
|
114
OJ notes/pages/Leetcode Increasing-Triplet-Subsequence.md
Normal file
114
OJ notes/pages/Leetcode Increasing-Triplet-Subsequence.md
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
# Leetcode Increasing-Triplet-Subsequence
|
||||||
|
|
||||||
|
2022-09-04 14:23
|
||||||
|
|
||||||
|
> ##### Algorithms:
|
||||||
|
>
|
||||||
|
> #algorithm #greedy
|
||||||
|
>
|
||||||
|
> ##### Data structures:
|
||||||
|
>
|
||||||
|
> #DS #array
|
||||||
|
>
|
||||||
|
> ##### Difficulty:
|
||||||
|
>
|
||||||
|
> #coding_problem #difficulty-medium
|
||||||
|
>
|
||||||
|
> ##### Additional tags:
|
||||||
|
>
|
||||||
|
> #leetcode #CS_list_need_understanding
|
||||||
|
>
|
||||||
|
> ##### Revisions:
|
||||||
|
>
|
||||||
|
> N/A
|
||||||
|
|
||||||
|
##### Links:
|
||||||
|
|
||||||
|
- [Link to problem](https://leetcode.com/problems/increasing-triplet-subsequence/)
|
||||||
|
- [Solution with explanation](https://leetcode.com/problems/increasing-triplet-subsequence/discuss/78993/Clean-and-short-with-comments-C%2B%2B)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
Given an integer array `nums`, return `true` _if there exists a triple of indices_ `(i, j, k)` _such that_ `i < j < k` _and_ `nums[i] < nums[j] < nums[k]`. If no such indices exists, return `false`.
|
||||||
|
|
||||||
|
#### Examples
|
||||||
|
|
||||||
|
**Example 1:**
|
||||||
|
|
||||||
|
**Input:** nums = [1,2,3,4,5]
|
||||||
|
**Output:** true
|
||||||
|
**Explanation:** Any triplet where i < j < k is valid.
|
||||||
|
|
||||||
|
**Example 2:**
|
||||||
|
|
||||||
|
**Input:** nums = [5,4,3,2,1]
|
||||||
|
**Output:** false
|
||||||
|
**Explanation:** No triplet exists.
|
||||||
|
|
||||||
|
**Example 3:**
|
||||||
|
|
||||||
|
**Input:** nums = [2,1,5,0,4,6]
|
||||||
|
**Output:** true
|
||||||
|
**Explanation:** The triplet (3, 4, 5) is valid because nums[3] == 0 < nums[4] == 4 < nums[5] == 6.
|
||||||
|
|
||||||
|
#### Constraints
|
||||||
|
|
||||||
|
- `1 <= nums.length <= 5 * 105`
|
||||||
|
- `-231 <= nums[i] <= 231 - 1`
|
||||||
|
|
||||||
|
### Thoughts
|
||||||
|
|
||||||
|
> [!summary]
|
||||||
|
> This is a #greedy problem.
|
||||||
|
|
||||||
|
Use two variables: `small` and `big` to keep track of stuff.
|
||||||
|
|
||||||
|
For each element, there are three possibilities:
|
||||||
|
|
||||||
|
- the element is smaller than `small`, assign the element
|
||||||
|
to `small`
|
||||||
|
|
||||||
|
> `small` and `big` doesn't represent `i` and `j`,
|
||||||
|
> accurately, they get updated lazily.
|
||||||
|
> And because we don't need to show `i`, `j`, `k`, this
|
||||||
|
> will be just fine
|
||||||
|
|
||||||
|
- the element is greater than `small`:
|
||||||
|
- the element is smaller than `big`, change `big`, this
|
||||||
|
allows more possibilities
|
||||||
|
- the element is bigger than `big`, found, exit loop.
|
||||||
|
|
||||||
|
> #### Why not #stack ?
|
||||||
|
>
|
||||||
|
> Similar to [[Leetcode Next-Greater-Element-I]], the property
|
||||||
|
> of stack can be used for **continuity** related problem, but
|
||||||
|
> here we don't need this.
|
||||||
|
|
||||||
|
### Solution
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class Solution {
|
||||||
|
public:
|
||||||
|
bool increasingTriplet(vector<int> &nums) {
|
||||||
|
// greedy algorithm
|
||||||
|
int small = INT_MAX, big = INT_MAX;
|
||||||
|
|
||||||
|
for (int i = 0, size = nums.size(); i < size; i++) {
|
||||||
|
if (nums[i] <= small) {
|
||||||
|
// Use equal sign here, to avoid small and big being same.
|
||||||
|
small = nums[i];
|
||||||
|
} else if (nums[i] <= big) {
|
||||||
|
// Use equal sign here, to avoid three consecutive
|
||||||
|
// same numbers
|
||||||
|
big = nums[i];
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
|
@ -4,15 +4,15 @@
|
||||||
|
|
||||||
> ##### Algorithms:
|
> ##### Algorithms:
|
||||||
>
|
>
|
||||||
> #algorithm #greedy
|
> #algorithm #greedy
|
||||||
>
|
>
|
||||||
> ##### Data structures:
|
> ##### Data structures:
|
||||||
>
|
>
|
||||||
> #DS
|
> #DS #array
|
||||||
>
|
>
|
||||||
> ##### Difficulty:
|
> ##### Difficulty:
|
||||||
>
|
>
|
||||||
> #coding_problem #difficulty-medium
|
> #coding_problem #difficulty-medium
|
||||||
>
|
>
|
||||||
> ##### Additional tags:
|
> ##### Additional tags:
|
||||||
>
|
>
|
||||||
|
@ -54,9 +54,9 @@ Given an array of intervals `intervals` where `intervals[i] = [starti, endi]`, r
|
||||||
|
|
||||||
#### Constraints
|
#### Constraints
|
||||||
|
|
||||||
- `1 <= intervals.length <= 105`
|
- `1 <= intervals.length <= 105`
|
||||||
- `intervals[i].length == 2`
|
- `intervals[i].length == 2`
|
||||||
- `-5 * 104 <= starti < endi <= 5 * 104`
|
- `-5 * 104 <= starti < endi <= 5 * 104`
|
||||||
|
|
||||||
### Thoughts
|
### Thoughts
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ first sort the intervals.
|
||||||
pick the intervals with smallest end, which will allow us to
|
pick the intervals with smallest end, which will allow us to
|
||||||
make more room for following ones.
|
make more room for following ones.
|
||||||
|
|
||||||
#tip: Use `&` to reference vectors in comp.function to save
|
#tip: Use `&` to reference vectors in comp.function to save
|
||||||
time.
|
time.
|
||||||
|
|
||||||
### Solution
|
### Solution
|
||||||
|
@ -100,3 +100,4 @@ public:
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
```
|
||||||
|
|
|
@ -57,13 +57,13 @@ Write an efficient algorithm that searches for a value `target` in an `m x n` in
|
||||||
|
|
||||||
#### Constraints
|
#### Constraints
|
||||||
|
|
||||||
- `m == matrix.length`
|
- `m == matrix.length`
|
||||||
- `n == matrix[i].length`
|
- `n == matrix[i].length`
|
||||||
- `1 <= n, m <= 300`
|
- `1 <= n, m <= 300`
|
||||||
- `-109 <= matrix[i][j] <= 109`
|
- `-109 <= matrix[i][j] <= 109`
|
||||||
- All the integers in each row are **sorted** in ascending order.
|
- All the integers in each row are **sorted** in ascending order.
|
||||||
- All the integers in each column are **sorted** in ascending order.
|
- All the integers in each column are **sorted** in ascending order.
|
||||||
- `-109 <= target <= 109`
|
- `-109 <= target <= 109`
|
||||||
|
|
||||||
### Thoughts
|
### Thoughts
|
||||||
|
|
||||||
|
@ -99,4 +99,4 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
3
_tools/prettify.sh
Executable file
3
_tools/prettify.sh
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#/bin/sh
|
||||||
|
|
||||||
|
find . -type f -iname "*.md" | xargs -0 -d "\n" prettier -w
|
Loading…
Reference in a new issue