代码重构 【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>进入。
# **不完全有序**
@@ -14,9 +14,7 @@
![](https://cdn.jsdelivr.net/gh/tan45du/photobed@master/photo/案例1.2wan88b4sdk0.png)
上面的新数组虽然不是完全有序但是也可以看成是由一个完全有序的数组翻折得到的或者可以理解成两个有序数组且第二个数组的最大值小于第一的最小值我们将其拼接拼接成了一个不完全有序的数组在这个数组中我们需要找到 target 找到后返回其索引如果没有找到则返回 -1
上面的新数组虽然不是完全有序但是也可以看成是由一个完全有序的数组翻折得到的或者可以理解成两个有序数组且第二个数组的最大值小于第一的最小值我们将其拼接拼接成了一个不完全有序的数组在这个数组中我们需要找到 target 找到后返回其索引如果没有找到则返回 -1
我们第一次看到这种题目时可能会想到我们只需要挨个遍历就好啦发现后返回索引即可这样做当然是可以滴那么我们可不可以使用二分查找呢
@@ -24,31 +22,31 @@
首先我们设想一下 mid 值会落到哪里我们一起来想一下
是不是只有两种情况 left 在一个数组同时落在 数组1 或同时在 数组2或者不在一个数组 left 在数组1mid 在数组2想到这里咱们这个题目已经完成一半了
是不是只有两种情况 left 在一个数组同时落在 数组 1 或同时在 数组 2或者不在一个数组 left 在数组 1mid 在数组 2想到这里咱们这个题目已经完成一半了
![mid值情况](https://cdn.jsdelivr.net/gh/tan45du/photobed@master/photo/mid值情况.3879bq8s3xk0.png)
那么我们先来思考一下我们可以根据 nums[mid] nums[left] 判断是因为我们的 mid 一定是会落在 left right 之间那如果 nums[mid] >= nums[left] 说明他俩落在一个数组里了如果 nums[mid] < nums[left] 说明他俩落在了不同的数组此时left 在数组1 mid在数组2.
那么我们先来思考一下我们可以根据 nums[mid] nums[left] 判断是因为我们的 mid 一定是会落在 left right 之间那如果 nums[mid] >= nums[left] 说明他俩落在一个数组里了如果 nums[mid] < nums[left] 说明他俩落在了不同的数组此时 left 在数组 1 mid 在数组 2.
left mid 落在同一数组时不能是 left 数组2 mid 数组1 因为咱们的 mid 是通过 left right 的下标求得所以应该在 left right 中间
left mid 落在同一数组时不能是 left 数组 2 mid 数组 1 因为咱们的 mid 是通过 left right 的下标求得所以应该在 left right 中间
如果我们的 mid left 在同一个数组内时咱们的 target 会有几种情况呢我们通过都落在 数组1 举例
如果我们的 mid left 在同一个数组内时咱们的 target 会有几种情况呢我们通过都落在 数组 1 举例
![left左](https://cdn.jsdelivr.net/gh/tan45du/photobed@master/photo/left左.6kl90uroee40.png)
无非也是两种情况用我们上面的例子来说
1.**落在 mid 的左边**当前例子中 情况是落在 [4,7区间内 4 <= target < 7 也就是 target >= nums[left] && target < nums[mid]此时我们让 right = mid -1 left right 都落到数组 1 下次查找我们就是在数组1中进行了完全有序
1.**落在 mid 的左边**当前例子中 情况是落在 [4,7区间内 4 <= target < 7 也就是 target >= nums[left] && target < nums[mid]此时我们让 right = mid -1 left right 都落到数组 1 下次查找我们就是在数组 1 中进行了完全有序
2.**落在 mid 的右边**此时例子中 target 不落在 [4,7区间内那就 target = 8 0 <= target <= 2 此时我们的 target 均小于 nums[left] 两种情况也就是target > nums[mid] || target < nums[left] 此时我们让 left = mid + 1即可也是为了慢慢将left right 指针赶到一个有序数组内
2.**落在 mid 的右边**此时例子中 target 不落在 [4,7区间内那就 target = 8 0 <= target <= 2 此时我们的 target 均小于 nums[left] 两种情况也就是 target > nums[mid] || target < nums[left] 此时我们让 left = mid + 1 即可也是为了慢慢将 left right 指针赶到一个有序数组内
那我们在来思考一下当 mid 值落在 **数组2** 中时target 会有几种情况呢其实和上面的例子思路一致情况相反而已
那我们在来思考一下当 mid 值落在 **数组 2** 中时target 会有几种情况呢其实和上面的例子思路一致情况相反而已
![right右](https://cdn.jsdelivr.net/gh/tan45du/photobed@master/photo/right右.3yvrwxloi3c0.png)
1. target <= nums[right] && target > nums[mid]
> 这里和上面的对应此时的情况就是整个落在右半部分我们下次就可以在数组2内进行查找
> 这里和上面的对应此时的情况就是整个落在右半部分我们下次就可以在数组 2 内进行查找
2. target > nums[right] || target < nums[mid]
@@ -66,7 +64,6 @@
请你在数组中搜索 target 如果数组中存在这个目标值则返回它的索引否则返回 -1
示例 1
> 输入nums = [4,5,6,7,0,1,2], target = 0
@@ -86,7 +83,7 @@
这个题目的解答方法咱们在上面已经有所描述下面我们来看一下下面这个例子的代码执行过程吧.
> 输入 nums = [4,5,6,7,8,0,1,2] target = 8
> 输入 nums = [4,5,6,7,8,0,1,2] target = 8
下面我们看题目代码吧如果还没有完全理解的同学可以仔细阅读 if else if 里面的语句还有注释一定可以整透的
@@ -111,7 +108,7 @@ class Solution {
// target 落在right和 mid 之间有可能在数组1 也有可能在数组2
} else if (target > nums[mid] || target < nums[left]) {
left = mid + 1;
}
}
//不落在同一数组的情况left 在数组1 mid 落在 数组2
}else if (nums[mid] < nums[left]) {
//有序的一段区间target 在 mid 和 right 之间
@@ -121,7 +118,7 @@ class Solution {
} else if (target < nums[mid] || target > nums[right]) {
right = mid - 1;
}
}
}
}
//没有查找到
return -1;
@@ -130,4 +127,4 @@ class Solution {
}
```
##
##