Compare commits

...

4 Commits

Author SHA1 Message Date
算法基地 697db85f2e
Merge pull request #26 from coderhare/main
剑指offer3,lc001, 027, 209更新cpp代码
2021-05-21 19:10:15 +08:00
chefyuan 86ba473ebc chefyuan 2021-05-21 18:34:13 +08:00
MoriSummer d1dee7d48e
Update 剑指offer3数组中重复的数.md 2021-05-20 17:19:44 +08:00
3119005212 19b8ca6a04 数组篇更新剑指offer,lc209, lc001,lc27的cpp代码 2021-05-20 17:17:30 +08:00
6 changed files with 167 additions and 7 deletions

View File

@ -26,7 +26,7 @@
``
@ -34,7 +34,7 @@
![](https://img-blog.csdnimg.cn/20210512205822221.gif)
root while
`` root while
@ -69,7 +69,105 @@ class Solution {
### Morris
Morris
Morris
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.1u3at0ckvn34.png)
Morris ```` right 2 9 9 right 2
Morris
1. p1.left == null p1 = p1.right( right )
2. p1.left != null p1 ( p2 ) right right
3. - p2 right p1p1, p1 = p1.left
- p2 right p1 right p1 p1 = p1.right
p1 root
p2 = p1.left p2 p1 5 right root root
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.3h60vcjhqo80.png)
p1 p1 = p1.left
p2 = p1.left 4 p1 9 right 2
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.zq91mdjkyzk.png)
p1, p1 = p1.leftp2 = p1.left 8 right p1
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.5vsh71yrzxs0.png)
right p1, right
p1 p1 = p1.leftp2 = p.left p2 == null,
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.zk7nxrjdgr.png)
p1, p1 = p1.left p1 = p1.right 4 p2 = p1.left
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.1pjni9r6tkps.png)
p2.right != null 4 right right p1 = p1.right
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.17t7n8yy340w.png)
p1 ,
On O1
####
```java
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root == null) {
return list;
}
TreeNode p1 = root; TreeNode p2 = null;
while (p1 != null) {
p2 = p1.left;
if (p2 != null) {
//找到左子树的最右叶子节点
while (p2.right != null && p2.right != p1) {
p2 = p2.right;
}
//添加 right 指针,对应 right 指针为 null 的情况
if (p2.right == null) {
list.add(p1.val);
p2.right = p1;
p1 = p1.left;
continue;
}
//对应 right 指针存在的情况,则去掉 right 指针
p2.right = null;
} else {
list.add(p1.val);
}
//移动 p1
p1 = p1.right;
}
return list;
}
}
```

View File

@ -64,4 +64,5 @@ class Solution {
temp
![](https://cdn.jsdelivr.net/gh/tan45du/bedphoto2@master/20210122/微信截图_20210128084750.6911k6mnrac0.png)
![](https://cdn.jsdelivr.net/gh/tan45du/bedphoto2@master/20210122/微信截图_20210128084750.6911k6mnrac0.png)

View File

@ -95,7 +95,7 @@ class Solution {
return 0;
}
int i = 0;
for (int j = 0; j < nums.length; ++j) {
for (int j = 0; j < len; ++j) {
//如果等于目标值,则删除
if (nums[j] == val) {
continue;
@ -110,7 +110,7 @@ class Solution {
Python3 Code:
```py
```python
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
i = 0
@ -121,3 +121,21 @@ class Solution:
return i
```
C++ Code:
```cpp
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n = nums.size();
if(!n) return 0;
int i = 0;
for(int j = 0; j < n; ++j){
if(nums[j] == val) continue;
nums[i++] = nums[j];
}
return i;
}
};
```

View File

@ -119,7 +119,7 @@ class Solution {
Python3 Code:
```py
```python
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
n = len(nums)

View File

@ -57,6 +57,8 @@ class Solution {
****
Java Code:
```java
class Solution {
public int findRepeatNumber(int[] nums) {
@ -80,3 +82,22 @@ class Solution {
}
```
C++ Code:
```cpp
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
if(nums.empty()) return 0;
int n = nums.size();
for(int i = 0; i < n; ++i){
while(nums[i] != i){
if(nums[i] == nums[nums[i]]) return nums[i];
swap(nums[i], nums[nums[i]]);
}
}
return -1;
}
};
```

View File

@ -38,6 +38,8 @@
####
Java Code:
```java
class Solution {
public int minSubArrayLen(int s, int[] nums) {
@ -60,3 +62,23 @@ class Solution {
}
```
C++ Code:
```cpp
class Solution {
public:
int minSubArrayLen(int t, vector<int>& nums) {
int n = nums.size();
int i = 0, sum = 0, winlen = INT_MAX;
for(int j = 0; j < n; ++j){
sum += nums[j];
while(sum >= t){
winlen = min(winlen, j - i + 1);
sum -= nums[i++];
}
}
return winlen == INT_MAX? 0: winlen;
}
};
```