diff --git "a/347円256円227円346円263円225円346円200円235円347円273円264円347円263円273円345円210円227円/344円272円214円345円210円206円346円237円245円346円211円276円350円257円246円350円247円243円.md" "b/347円256円227円346円263円225円346円200円235円347円273円264円347円263円273円345円210円227円/344円272円214円345円210円206円346円237円245円346円211円276円350円257円246円350円247円243円.md" index d4c6837394..47533170d5 100644 --- "a/347円256円227円346円263円225円346円200円235円347円273円264円347円263円273円345円210円227円/344円272円214円345円210円206円346円237円245円346円211円276円350円257円246円350円247円243円.md" +++ "b/347円256円227円346円263円225円346円200円235円347円273円264円347円263円273円345円210円227円/344円272円214円345円210円206円346円237円245円346円211円276円350円257円246円350円247円243円.md" @@ -96,6 +96,8 @@ int binarySearch(int[] nums, int target) { } ``` + + 这段代码可以解决力扣第 704 题「二分查找」,但我们深入探讨一下其中的细节。 **1、为什么 while 循环的条件中是 <=,而不是 <**? @@ -289,6 +291,8 @@ int left_bound(int[] nums, int target) { } ``` + + 这样就和第一种二分搜索算法统一了,都是两端都闭的「搜索区间」,而且最后返回的也是 `left` 变量的值。只要把住二分搜索的逻辑,两种形式大家看自己喜欢哪种记哪种吧。 ### 三、寻找右侧边界的二分查找 @@ -387,6 +391,8 @@ int right_bound(int[] nums, int target) { } ``` + + 当然,由于 while 的结束条件为 `right == left - 1`,所以你把上述代码中的 `left - 1` 都改成 `right` 也没有问题,这样可能更有利于看出来这是在「搜索右侧边界」。 至此,搜索右侧边界的二分查找的两种写法也完成了,其实将「搜索区间」统一成两端都闭反而更容易记忆,你说是吧?

AltStyle によって変換されたページ (->オリジナル) /