From 40a5eaab43ab694a5c9912eba1c58dd200d459ae Mon Sep 17 00:00:00 2001 From: lincongcong Date: Sat, 17 Jul 2021 23:58:15 +0800 Subject: [PATCH 01/12] add go for leetcode33 --- .../leetcode33不完全有序查找目标元素(不包含重复值).md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md b/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md index a1055df..8a2398c 100644 --- a/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md +++ b/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md @@ -92,6 +92,8 @@ #### 题目代码 +Java Code: + ```java class Solution { public int search(int[] nums, int target) { @@ -130,4 +132,6 @@ class Solution { } ``` -## \ No newline at end of file +Go Code: +```go +``` \ No newline at end of file From b46603ce371075db47fc0236f29e8c3a67bb8c58 Mon Sep 17 00:00:00 2001 From: lincongcong Date: Sun, 18 Jul 2021 21:32:28 +0800 Subject: [PATCH 02/12] add lc33 in go --- .../leetcode33不完全有序查找目标元素(不包含重复值).md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md b/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md index 8a2398c..7574045 100644 --- a/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md +++ b/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md @@ -134,4 +134,36 @@ class Solution { Go Code: ```go +func search(nums []int, target int) int { + // 左右指针 + left := 0 + right := len(nums) - 1 + for (left <= right) { + mid := left + ((right - left) >> 1) + rightNum, leftNum, midNum := nums[right], nums[left], nums[mid] + if midNum == target { + return mid + } + + //落在同一数组的情况,同时落在数组1 或 数组2 + if midNum >= leftNum { + //target 落在 left 和 mid 之间,则移动我们的right,完全有序的一个区间内查找 + if midNum > target && target >= leftNum { + right = mid - 1 + } else { + // target落在另一个无序区间, 但和原数组的性质相符, 所以可以继续循环 + left = mid + 1 + } + } else { + //target 落在 mid 和 right 之间,则移动我们的left,完全有序的一个区间内查找 + if midNum < target && target <= rightNum { + left = mid + 1 + } else { + // target落在另一个无序区间, 但和原数组的性质相符, 所以可以继续循环 + right = mid - 1 + } + } + } + return -1 +} ``` \ No newline at end of file From a177043d3f6bc55048d3a4c32e751df06cf2f9ac Mon Sep 17 00:00:00 2001 From: lincongcong Date: Mon, 19 Jul 2021 14:33:01 +0800 Subject: [PATCH 03/12] =?UTF-8?q?add=20=E4=BA=8C=E5=88=86=E6=9F=A5?= =?UTF-8?q?=E6=89=BE=E8=AF=A6=E8=A7=A3code=20in=20Go?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../二分查找及其变种/二分查找详解.md | 114 +++++++++++++----- 1 file changed, 83 insertions(+), 31 deletions(-) diff --git a/animation-simulation/二分查找及其变种/二分查找详解.md b/animation-simulation/二分查找及其变种/二分查找详解.md index 74398a9..2fe2925 100644 --- a/animation-simulation/二分查找及其变种/二分查找详解.md +++ b/animation-simulation/二分查找及其变种/二分查找详解.md @@ -116,29 +116,56 @@ target < nums[mid] 则在左半区间继续进行搜索,即 right = mid -1; ![二分查找2](https://img-blog.csdnimg.cn/img_convert/eb648f86b4ada5b32afc7a52e78d9953.gif) -下面我们来看一下二分查找的代码,可以认真思考一下 if 语句的条件,每个都没有简写。 +下面我们来看一下二分查找的代码,可以认真思考一下 if 语句的条件,每个都没有简写。 + +Java Code: ```java - public static int binarySearch(int[] nums,int target,int left, int right) { - //这里需要注意,循环条件 - while (left <= right) { - //这里需要注意,计算mid - int mid = left + ((right - left) >> 1); - if (nums[mid] == target) { - return mid; - }else if (nums[mid] < target) { - //这里需要注意,移动左指针 - left = mid + 1; - }else if (nums[mid] > target) { - //这里需要注意,移动右指针 - right = mid - 1; - } +public static int binarySearch(int[] nums,int target,int left, int right) { + //这里需要注意,循环条件 + while (left <= right) { + //这里需要注意,计算mid + int mid = left + ((right - left) >> 1); + if (nums[mid] == target) { + return mid; + }else if (nums[mid] < target) { + //这里需要注意,移动左指针 + left = mid + 1; + }else if (nums[mid] > target) { + //这里需要注意,移动右指针 + right = mid - 1; } - //没有找到该元素,返回 -1 - return -1; } + //没有找到该元素,返回 -1 + return -1; +} ``` +Go Code: + +```go +func binarySearch(nums []int, target, left, right int) int { + //这里需要注意,循环条件 + for left <= right { + //这里需要注意,计算mid + mid := left + ((right - left) >> 1) + if nums[mid] == target { + return mid + } else if nums[mid] < target { + //这里需要注意,移动左指针 + left = mid + 1 + } else if nums[mid] > target { + //这里需要注意,移动右指针 + right = mid - 1 + } + } + //没有找到该元素,返回 -1 + return -1 +} +``` + + + 二分查找的思路及代码已经理解了,那么我们来看一下实现时容易出错的地方 @@ -155,25 +182,50 @@ target < nums[mid] 则在左半区间继续进行搜索,即 right = mid -1; 下面我们来看一下二分查找的递归写法 +Java Code: + ```java public static int binarySearch(int[] nums,int target,int left, int right) { - if (left <= right) { - int mid = left + ((right - left) >> 1); - if (nums[mid] == target) { - //查找成功 - return mid; - }else if (nums[mid] > target) { - //新的区间,左半区间 - return binarySearch(nums,target,left,mid-1); - }else if (nums[mid] < target) { - //新的区间,右半区间 - return binarySearch(nums,target,mid+1,right); - } + if (left <= right) { + int mid = left + ((right - left) >> 1); + if (nums[mid] == target) { + //查找成功 + return mid; + }else if (nums[mid] > target) { + //新的区间,左半区间 + return binarySearch(nums,target,left,mid-1); + }else if (nums[mid] < target) { + //新的区间,右半区间 + return binarySearch(nums,target,mid+1,right); } - //不存在返回-1 - return -1; } + //不存在返回-1 + return -1; +} +``` + +Go Code: + +```go +func binarySearch(nums []int, target, left, right int) int { + + if left <= right { + mid := left + ((right - left) >> 1) + if nums[mid] == target { + //查找成功 + return mid + } else if nums[mid] > target { + //新的区间,左半区间 + return binarySearch(nums, target, left, mid-1) + } else if nums[mid] < target { + //新的区间,右半区间 + return binarySearch(nums, target, mid+1, right) + } + } + //不存在返回-1 + return -1 +} ``` From 02aaf283e1ad14e648e8c147394f1c47d5823772 Mon Sep 17 00:00:00 2001 From: lincongcong Date: Tue, 20 Jul 2021 23:57:06 +0800 Subject: [PATCH 04/12] add erfen in go --- .../找出第一个大于或小于目标的索引.md | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md b/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md index c58d6cc..9e79ded 100644 --- a/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md +++ b/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md @@ -76,25 +76,49 @@ public static int lowBoundnum(int[] nums,int target,int left, int right) { ```java public static int upperBoundnum(int[] nums,int target,int left, int right) { - while (left <= right) { + while (left <= right) { - int mid = left + ((right - left) >> 1); - //小于目标值 - if (nums[mid] < target) { - //看看是不是当前区间的最后一位,如果当前小于,后面一位大于,返回当前值即可 - if (mid == right || nums[mid+1] >= target) { - return mid; - } - else{ - left = mid + 1; - } - - } else if (nums[mid] >= target){ - right = mid - 1; + int mid = left + ((right - left) >> 1); + //小于目标值 + if (nums[mid] < target) { + //看看是不是当前区间的最后一位,如果当前小于,后面一位大于,返回当前值即可 + if (mid == right || nums[mid+1] >= target) { + return mid; } + else{ + left = mid + 1; + } + + } else if (nums[mid] >= target){ + right = mid - 1; } - //没有查询到的情况 - return -1; } + //没有查询到的情况 + return -1; +} ``` +Go Code: +```go +func upperBoundnum(nums []int, target, left, right int) int { + + for left <= right { + + mid := left + ((right - left) >> 1) + //小于目标值 + if nums[mid] < target { + //看看是不是当前区间的最后一位,如果当前小于,后面一位大于,返回当前值即可 + if mid == right || nums[mid+1] >= target { + return mid + } else { + left = mid + 1 + } + + } else if nums[mid] >= target { + right = mid - 1 + } + } + //没有查询到的情况 + return -1 +} +``` \ No newline at end of file From e63c35b170ae7a4534abfdbba53c0fb658839adc Mon Sep 17 00:00:00 2001 From: lincongcong Date: Wed, 21 Jul 2021 23:41:58 +0800 Subject: [PATCH 05/12] add a code in go --- .../找出第一个大于或小于目标的索引.md | 64 +++++++++++++------ 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md b/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md index 9e79ded..4c768fb 100644 --- a/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md +++ b/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md @@ -38,31 +38,56 @@ OK!我们到这一步就能把这个变种给整的明明白白的了,下面我们看一哈程序代码吧,也是非常简单的。 - +Java Code: ```java public static int lowBoundnum(int[] nums,int target,int left, int right) { - while (left <= right) { - //求中间值 - int mid = left + ((right - left) >> 1); - //大于目标值的情况 - if (nums[mid] > target) { - //返回 mid - if (mid == 0 || nums[mid-1] <= target) { - return mid; - } - else{ - right = mid -1; - } - - } else if (nums[mid] <= target){ - left = mid + 1; + while (left <= right) { + //求中间值 + int mid = left + ((right - left) >> 1); + //大于目标值的情况 + if (nums[mid] > target) { + //返回 mid + if (mid == 0 || nums[mid-1] <= target) { + return mid; } + else{ + right = mid -1; + } + + } else if (nums[mid] <= target){ + left = mid + 1; } - //所有元素都小于目标元素 - return -1; } + //所有元素都小于目标元素 + return -1; +} +``` + +Go Code: +```go +func lowBoundnum(nums []int, target, left, right int) int { + + for (left <= right) { + //求中间值 + mid := left + ((right - left) >> 1); + //大于目标值的情况 + if (nums[mid] > target) { + //返回 mid + if (mid == 0 || nums[mid-1] <= target) { + return mid + }else{ + right = mid -1 + } + + } else if (nums[mid] <= target){ + left = mid + 1 + } + } + //所有元素都小于目标元素 + return -1 +} ``` ## **找出最后一个小于目标元素的索引** @@ -73,6 +98,8 @@ public static int lowBoundnum(int[] nums,int target,int left, int right) { 查找最后一个小于目标数的元素,比如我们的目标数为 7 ,此时他前面的数为 6,最后一个 6 的索引为 5,此时我们返回 5 即可,如果目标数元素为 12,那么我们最后一个元素为 11,仍小于目标数,那么我们此时返回 8,即可。这个变种其实算是上面变种的相反情况,上面的会了,这个也完全可以搞定了,下面我们看一下代码吧。 +Java Code: + ```java public static int upperBoundnum(int[] nums,int target,int left, int right) { @@ -99,6 +126,7 @@ public static int upperBoundnum(int[] nums,int target,int left, int right) { ``` Go Code: + ```go func upperBoundnum(nums []int, target, left, right int) int { From 44004ea38f75eede7b3ef8c6965476f4b794a52e Mon Sep 17 00:00:00 2001 From: lincongcong Date: Thu, 22 Jul 2021 23:50:46 +0800 Subject: [PATCH 06/12] =?UTF-8?q?add=20code=20of=20=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E7=9A=84=E4=BA=8C=E5=88=86=E6=9F=A5=E6=89=BE?= =?UTF-8?q?=20in=20go?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../二分查找及其变种/二维数组的二分查找.md | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/animation-simulation/二分查找及其变种/二维数组的二分查找.md b/animation-simulation/二分查找及其变种/二维数组的二分查找.md index b5a27dd..bc24d5f 100644 --- a/animation-simulation/二分查找及其变种/二维数组的二分查找.md +++ b/animation-simulation/二分查找及其变种/二维数组的二分查找.md @@ -52,6 +52,8 @@ #### 题目代码 +Java Code: + ```java class Solution { public boolean searchMatrix(int[][] matrix, int target) { @@ -84,3 +86,32 @@ class Solution { } ``` +Go Code: +```go +func searchMatrix(matrix [][]int, target int) bool { + if len(matrix) == 0 { + return false + } + // 行数 + row := len(matrix) + //列数 + col := len(matrix[0]) + // 行数 * 列数 - 1 为右指针 + left, right := 0, row * col - 1 + for (left <= right) { + mid := left + ((right - left) >> 1) + //将一维坐标变为二维坐标 + rownum := mid / col + colnum := mid % col + if matrix[rownum][colnum] == target { + return true + } else if matrix[rownum][colnum] > target { + right = mid - 1 + } else if matrix[rownum][colnum] < target { + left = mid + 1 + } + } + return false +} +``` + From 5fcc995b704d2f086a86a6a97f684bed9ec273d8 Mon Sep 17 00:00:00 2001 From: lincongcong Date: Fri, 23 Jul 2021 23:50:29 +0800 Subject: [PATCH 07/12] add a code in go --- .../leetcode35搜索插入位置.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/animation-simulation/二分查找及其变种/leetcode35搜索插入位置.md b/animation-simulation/二分查找及其变种/leetcode35搜索插入位置.md index 30f4bbd..f239464 100644 --- a/animation-simulation/二分查找及其变种/leetcode35搜索插入位置.md +++ b/animation-simulation/二分查找及其变种/leetcode35搜索插入位置.md @@ -40,6 +40,8 @@ #### 题目代码 +Java Code: + ```java class Solution { public int searchInsert(int[] nums, int target) { @@ -66,5 +68,28 @@ class Solution { } ``` +Go Code: + +```go +func searchInsert(nums []int, target int) int { + left, right := 0, len(nums) - 1 + for (left <= right) { + mid := left + ((right - left) >> 1) + // 查询成功 + if nums[mid] == target { + return mid + // 右区间 + } else if nums[mid] < target { + left = mid + 1 + // 左区间 + } else { + right = mid - 1 + } + } + return left + +} +``` + From 3f2fb1967f6ba81742afe93a17b5abd52df6fc2f Mon Sep 17 00:00:00 2001 From: lincongcong Date: Sat, 24 Jul 2021 23:51:59 +0800 Subject: [PATCH 08/12] add lc153 code in go --- .../leetcode153搜索旋转数组的最小值.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md b/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md index 7e165f4..f1d22c0 100644 --- a/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md +++ b/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md @@ -111,3 +111,26 @@ public: }; ``` +Go Code: + +```go +func findMin(nums []int) int { + left := 0 + right := len(nums) - 1 + + for (left < right) { + + if (nums[left] < nums[right]) { + return nums[left] + } + mid := left + ((right - left) >> 1) + if (nums[left] > nums[mid]) { + right = mid + } else { + left = mid + 1 + } + } + return nums[left] +} +``` + From a1afdf4e26e35fe8c081ddf1c818778681b1c3f7 Mon Sep 17 00:00:00 2001 From: lincongcong Date: Sun, 25 Jul 2021 23:25:59 +0800 Subject: [PATCH 09/12] add lc34 code in go --- .../leetcode34查找第一个位置和最后一个位置.md | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md b/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md index 32ca910..d0655b4 100644 --- a/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md +++ b/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md @@ -131,6 +131,8 @@ int upperBound(int[] nums, int target) { #### **题目完整代码** +Java Code: + ```java class Solution { public int[] searchRange (int[] nums, int target) { @@ -176,3 +178,49 @@ class Solution { } ``` +Go Code: + +```go +func searchRange(nums []int, target int) []int { + upper := upperBound(nums, target) + low := lowerBound(nums, target) + // 不存在情况 + if (upper < low) { + return []int{-1, -1} + } + + return []int{low, upper} +} + +//计算下边界 +func lowerBound(nums []int, target int) int { + left, right := 0, len(nums) - 1 + for (left <= right) { + //这里需要注意,计算mid + mid := left + ((right - left) >> 1) + if (target <= nums[mid]) { + //当目标值小于等于nums[mid]时,继续在左区间检索,找到第一个数 + right = mid - 1 + + }else if (target > nums[mid]) { + //目标值大于nums[mid]时,则在右区间继续检索,找到第一个等于目标值的数 + left = mid + 1 + } + } + return left +} +//计算上边界 +func upperBound(nums []int, target int) int { + left, right := 0, len(nums) - 1 + for (left <= right) { + mid := left + ((right - left) >> 1) + if (target >= nums[mid]) { + left = mid + 1 + }else if (target < nums[mid]) { + right = mid - 1 + } + } + return right +} +``` + From 3096e19a2aac7ae1f3417be0f3b544665a96748d Mon Sep 17 00:00:00 2001 From: lincongcong Date: Mon, 26 Jul 2021 23:59:59 +0800 Subject: [PATCH 10/12] add lc81 code in go --- .../leetcode 81不完全有序查找目标元素(包含重复值) .md | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md b/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md index 48622c6..bab1fee 100644 --- a/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md +++ b/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md @@ -42,10 +42,12 @@ #### **题目代码** +Java Code: + ```java class Solution { public boolean search(int[] nums, int target) { - int left = 0; + int left = 0; int right = nums.length - 1; while (left <= right) { int mid = left+((right-left)>>1); @@ -76,4 +78,38 @@ class Solution { } ``` +Go Code: + +```go +func search(nums []int, target int) bool { + left := 0 + right := len(nums) - 1 + for (left <= right) { + mid := left+((right-left)>>1) + if (nums[mid] == target) { + return true + } + if (nums[mid] == nums[left]) { + left++ + continue + } + if (nums[mid] > nums[left]) { + if (nums[mid] > target && target >= nums[left]) { + right = mid - 1 + } else if (target > nums[mid] || target < nums[left]) { + left = mid + 1 + } + + }else if (nums[mid] < nums[left]) { + if (nums[mid] < target && target <= nums[right]) { + left = mid + 1 + } else if (target < nums[mid] || target > nums[right]) { + right = mid - 1 + } + } + } + return false +} +``` + From d0abf3e1d8e4aa76cdb9d5e48b3e5eebfd343062 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 16:17:05 +0000 Subject: [PATCH 11/12] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84=20?= =?UTF-8?q?=E3=80=90Github=20Actions=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leetcode 81不完全有序查找目标元素(包含重复值) .md | 4 ++-- .../二分查找及其变种/leetcode153搜索旋转数组的最小值.md | 4 ++-- .../leetcode33不完全有序查找目标元素(不包含重复值).md | 2 +- .../leetcode34查找第一个位置和最后一个位置.md | 6 +++--- animation-simulation/二分查找及其变种/二分查找详解.md | 3 +-- animation-simulation/二分查找及其变种/二维数组的二分查找.md | 1 + .../二分查找及其变种/找出第一个大于或小于目标的索引.md | 1 + 7 files changed, 11 insertions(+), 10 deletions(-) diff --git a/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md b/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md index aff72c1..2964fe2 100644 --- a/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md +++ b/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md @@ -96,7 +96,7 @@ func search(nums []int, target int) bool { right = mid - 1 } else if (target > nums[mid] || target < nums[left]) { left = mid + 1 - } + } }else if (nums[mid] < nums[left]) { if (nums[mid] < target && target <= nums[right]) { @@ -104,7 +104,7 @@ func search(nums []int, target int) bool { } else if (target < nums[mid] || target > nums[right]) { right = mid - 1 } - } + } } return false } diff --git a/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md b/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md index ea27f10..d705ef4 100644 --- a/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md +++ b/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md @@ -113,10 +113,10 @@ func findMin(nums []int) int { right := len(nums) - 1 for (left < right) { - + if (nums[left] < nums[right]) { return nums[left] - } + } mid := left + ((right - left) >> 1) if (nums[left] > nums[mid]) { right = mid diff --git a/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md b/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md index 654ced5..78d4f75 100644 --- a/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md +++ b/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md @@ -163,5 +163,5 @@ func search(nums []int, target int) int { } } return -1 -} +} ``` diff --git a/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md b/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md index 11af344..2e62413 100644 --- a/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md +++ b/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md @@ -203,13 +203,13 @@ func lowerBound(nums []int, target int) int { //计算上边界 func upperBound(nums []int, target int) int { left, right := 0, len(nums) - 1 - for (left <= right) { + for (left <= right) { mid := left + ((right - left) >> 1) if (target >= nums[mid]) { - left = mid + 1 + left = mid + 1 }else if (target < nums[mid]) { right = mid - 1 - } + } } return right } diff --git a/animation-simulation/二分查找及其变种/二分查找详解.md b/animation-simulation/二分查找及其变种/二分查找详解.md index 5f59988..b285a24 100644 --- a/animation-simulation/二分查找及其变种/二分查找详解.md +++ b/animation-simulation/二分查找及其变种/二分查找详解.md @@ -140,7 +140,6 @@ func binarySearch(nums []int, target, left, right int) int { } ``` - 二分查找的思路及代码已经理解了,那么我们来看一下实现时容易出错的地方 1.计算 mid 时 ,不能使用 (left + right )/ 2,否则有可能会导致溢出 @@ -157,7 +156,7 @@ Java Code: ```java public static int binarySearch(int[] nums,int target,int left, int right) { - + if (left <= right) { int mid = left + ((right - left) >> 1); if (nums[mid] == target) { diff --git a/animation-simulation/二分查找及其变种/二维数组的二分查找.md b/animation-simulation/二分查找及其变种/二维数组的二分查找.md index f775bf9..c9ff418 100644 --- a/animation-simulation/二分查找及其变种/二维数组的二分查找.md +++ b/animation-simulation/二分查找及其变种/二维数组的二分查找.md @@ -87,6 +87,7 @@ class Solution { ``` Go Code: + ```go func searchMatrix(matrix [][]int, target int) bool { if len(matrix) == 0 { diff --git a/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md b/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md index 25f5dc7..c3484b4 100644 --- a/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md +++ b/animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md @@ -62,6 +62,7 @@ public static int lowBoundnum(int[] nums,int target,int left, int right) { ``` Go Code: + ```go func lowBoundnum(nums []int, target, left, right int) int { From 0f08417eb46731cdf8dc931a2908670a0b097a0f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 29 Jul 2021 03:45:12 +0000 Subject: [PATCH 12/12] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84=20?= =?UTF-8?q?=E3=80=90Github=20Actions=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leetcode 81不完全有序查找目标元素(包含重复值) .md | 2 -- .../二分查找及其变种/leetcode153搜索旋转数组的最小值.md | 1 - .../leetcode33不完全有序查找目标元素(不包含重复值).md | 1 - .../二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md | 1 - animation-simulation/二分查找及其变种/leetcode35搜索插入位置.md | 1 - animation-simulation/二分查找及其变种/二维数组的二分查找.md | 1 - 6 files changed, 7 deletions(-) diff --git a/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md b/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md index 206fff5..2af05c7 100644 --- a/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md +++ b/animation-simulation/二分查找及其变种/leetcode 81不完全有序查找目标元素(包含重复值) .md @@ -75,5 +75,3 @@ class Solution { } } ``` - - diff --git a/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md b/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md index 516e5a9..5ab4c35 100644 --- a/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md +++ b/animation-simulation/二分查找及其变种/leetcode153搜索旋转数组的最小值.md @@ -104,4 +104,3 @@ public: } }; ``` - diff --git a/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md b/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md index db6d2fc..2258fad 100644 --- a/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md +++ b/animation-simulation/二分查找及其变种/leetcode33不完全有序查找目标元素(不包含重复值).md @@ -128,4 +128,3 @@ class Solution { } } ``` - diff --git a/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md b/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md index 0a43f40..a88fb3e 100644 --- a/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md +++ b/animation-simulation/二分查找及其变种/leetcode34查找第一个位置和最后一个位置.md @@ -168,4 +168,3 @@ class Solution { } } ``` - diff --git a/animation-simulation/二分查找及其变种/leetcode35搜索插入位置.md b/animation-simulation/二分查找及其变种/leetcode35搜索插入位置.md index 142d4ce..f5ecfe3 100644 --- a/animation-simulation/二分查找及其变种/leetcode35搜索插入位置.md +++ b/animation-simulation/二分查找及其变种/leetcode35搜索插入位置.md @@ -69,4 +69,3 @@ class Solution { ``` Go Code: - diff --git a/animation-simulation/二分查找及其变种/二维数组的二分查找.md b/animation-simulation/二分查找及其变种/二维数组的二分查找.md index ff41324..8e2799e 100644 --- a/animation-simulation/二分查找及其变种/二维数组的二分查找.md +++ b/animation-simulation/二分查找及其变种/二维数组的二分查找.md @@ -85,4 +85,3 @@ class Solution { } } ``` -