diff --git a/src/main/java/com/nbee/solution/practice/BinarySearch.java b/src/main/java/com/nbee/solution/practice/BinarySearch.java index 4a4fc8c..c8e3b83 100644 --- a/src/main/java/com/nbee/solution/practice/BinarySearch.java +++ b/src/main/java/com/nbee/solution/practice/BinarySearch.java @@ -1,5 +1,4 @@ package com.nbee.solution.practice; - class BinarySearch { public static int binarySearchBasic(int[] nums, int target){ int i = 0 ,j = nums.length - 1;//设置指针和初始值 @@ -17,10 +16,28 @@ class BinarySearch { } } return -1; + /** + * 为什么必须是i<=j? + * 在二分搜索中,使用条件 i <= j 作为循环的继续条件是为了确保在数组只剩下一个元素时,仍然能够检查这个元素。这是因为在二分搜索中 + * 你每次都在缩小搜索范围,直到没有元素剩余。如果用 i < j 作为条件,当 i 和 j 相等时,这个位置的元素将不会被检查,可能导致漏掉目标元素。 + */ + } + + + public static int binarySearchAlternative(int[] nums, int target){ + int i = 0 ,j = nums.length; + while (i < j){ + int m = (i + j) >>> 1; + if (target < nums[m]){ + j = m; + } + else if (nums[m] < target){ + i = m + 1; + } + else { + return m; + } + } + return -1; } - /** - * 为什么必须是i<=j? - * 在二分搜索中,使用条件 i <= j 作为循环的继续条件是为了确保在数组只剩下一个元素时,仍然能够检查这个元素。这是因为在二分搜索中 - * 你每次都在缩小搜索范围,直到没有元素剩余。如果用 i < j 作为条件,当 i 和 j 相等时,这个位置的元素将不会被检查,可能导致漏掉目标元素。 - */ }