代码重构 【Github Actions】

This commit is contained in:
github-actions[bot]
2021-07-23 15:44:19 +00:00
parent c79cac3d9c
commit f671c90754
94 changed files with 1609 additions and 2111 deletions

View File

@@ -1,8 +1,8 @@
> 如果阅读时发现错误或者动画不可以显示的问题可以添加我微信好友 **[tan45du_one](https://raw.githubusercontent.com/tan45du/tan45du.github.io/master/个人微信.15egrcgqd94w.jpg)** ,备注 github + 题目 + 问题 向我反馈
> 如果阅读时发现错误或者动画不可以显示的问题可以添加我微信好友 **[tan45du_one](https://raw.githubusercontent.com/tan45du/tan45du.github.io/master/个人微信.15egrcgqd94w.jpg)** ,备注 github + 题目 + 问题 向我反馈
>
> 感谢支持该仓库会一直维护希望对各位有一丢丢帮助
>
> 另外希望手机阅读的同学可以来我的 <u>[**公众号袁厨的算法小屋**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u> 两个平台同步,想要和题友一起刷题,互相监督的同学,可以在我的小屋点击<u>[**刷题小队**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u>进入。
> 另外希望手机阅读的同学可以来我的 <u>[**公众号袁厨的算法小屋**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u> 两个平台同步,想要和题友一起刷题,互相监督的同学,可以在我的小屋点击<u>[**刷题小队**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u>进入。
今天我们一起来看一下可以用快速排序秒杀的经典题或许这些题目大家已经做过不过可以再来一起复习一遍加深印象
@@ -16,7 +16,7 @@
问题描述
荷兰国旗是由红白蓝3种颜色的条纹拼接而成如下图所示
荷兰国旗是由红白蓝 3 种颜色的条纹拼接而成如下图所示
![荷兰国旗](https://cdn.jsdelivr.net/gh/tan45du/test@master/photo/微信截图_20210305145819.4jrud8f8xny0.png)
@@ -24,15 +24,13 @@
![荷兰国旗问题](https://cdn.jsdelivr.net/gh/tan45du/test@master/photo/7789414-8baf85cac6228621.62ygbgv09ek0.png)
需求是把这些条纹按照颜色排好红色的在上半部分白色的在中间部分蓝色的在下半部分我们把这类问题称作荷兰国旗问题
我们把荷兰国旗问题用数组的形式表达一下是这样的
给定一个整数数组给定一个值K这个值在原数组中一定存在要求把数组中小于 K 的元素放到数组的左边大于K的元素放到数组的右边等于K的元素放到数组的中间最终返回一个整数数组其中只有两个值分别是等于K的数组部分的左右两个下标值
给定一个整数数组给定一个值 K这个值在原数组中一定存在要求把数组中小于 K 的元素放到数组的左边大于 K 的元素放到数组的右边等于 K 的元素放到数组的中间最终返回一个整数数组其中只有两个值分别是等于 K 的数组部分的左右两个下标值
例如给定数组[2, 3, 1, 9, 7, 6, 1, 4, 5]给定一个值4那么经过处理原数组可能得一种情况是[2, 3, 1, 1, 4, 9, 7, 6, 5]需要注意的是小于4的部分不需要有序大于4的部分也不需要有序返回等于4部分的左右两个下标[4, 4]
例如给定数组[2, 3, 1, 9, 7, 6, 1, 4, 5]给定一个值 4那么经过处理原数组可能得一种情况是[2, 3, 1, 1, 4, 9, 7, 6, 5]需要注意的是小于 4 的部分不需要有序大于 4 的部分也不需要有序返回等于 4 部分的左右两个下标[4, 4]
这不就是我们之前说过的三向切分吗一模一样
@@ -68,7 +66,7 @@
**做题思路**
这个题目我们使用 Arrays.sort() 解决哈哈但是那样太无聊啦题目含义就是让我们将所有的 0 放在前面2放在后面1 放在中间是不是和我们上面说的荷兰国旗问题一样我们仅仅将 1 做为 pivot
这个题目我们使用 Arrays.sort() 解决哈哈但是那样太无聊啦题目含义就是让我们将所有的 0 放在前面2 放在后面1 放在中间是不是和我们上面说的荷兰国旗问题一样我们仅仅将 1 做为 pivot
下面我们直接看代码吧和三向切分基本一致
@@ -82,7 +80,7 @@ class Solution {
//这里和三向切分不完全一致
int i = left;
int right = len-1;
while (i <= right) {
if (nums[i] == 2) {
swap(nums,i,right--);
@@ -91,7 +89,7 @@ class Solution {
} else {
i++;
}
}
}
}
public void swap (int[] nums, int i, int j) {
int temp = nums[i];
@@ -112,7 +110,7 @@ public:
//这里和三向切分不完全一致
int i = left;
int right = len-1;
while (i <= right) {
if (nums[i] == 2) {
swap(nums,i,right--);
@@ -137,7 +135,7 @@ Python Code:
```python
from typing import List
class Solution:
def sortColors(self, nums: List[int]):
def sortColors(self, nums: List[int]):
leng = len(nums)
left = 0
# 这里和三向切分不完全一致
@@ -153,17 +151,18 @@ class Solution:
left += 1
else:
i += 1
def swap(self, nums: List[int], i: int, j: int):
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
```
另外我们看这段代码有什么问题呢那就是我们即使完全符合时仍会交换元素这样会大大降低我们的效率
例如[0,0,0,1,1,1,2,2,2]
此时我们完全符合情况不需要交换元素但是按照我们上面的代码0,2 的每个元素会和自己进行交换所以这里我们可以根据 i left 的值是否相等来决定是否需要交换大家可以自己写一下
此时我们完全符合情况不需要交换元素但是按照我们上面的代码0,2 的每个元素会和自己进行交换所以这里我们可以根据 i left 的值是否相等来决定是否需要交换大家可以自己写一下
下面我们看一下另外一种写法
@@ -187,7 +186,7 @@ class Solution {
int len = nums.length;
int right = len - 1;
for (int i = 0; i <= right; ++i) {
if (nums[i] == 0) {
if (nums[i] == 0) {
swap(nums,i,left);
left++;
}
@@ -200,7 +199,7 @@ class Solution {
}
}
}
}
public void swap (int[] nums,int i, int j) {
int temp = nums[i];
@@ -220,7 +219,7 @@ public:
int len = nums.size();
int right = len - 1;
for (int i = 0; i <= right; ++i) {
if (nums[i] == 0) {
if (nums[i] == 0) {
swap(nums,i,left);
left++;
}
@@ -233,7 +232,7 @@ public:
}
}
}
}
void swap (vector<int>& nums, int i, int j) {
int temp = nums[i];
@@ -268,4 +267,3 @@ class Solution:
```
好啦这个问题到这就结束啦是不是很简单啊我们明天见