美文网首页
二分查找

二分查找

作者: YAOPRINCESS | 来源:发表于2020-07-14 13:19 被阅读0次
    import java.util.ArrayList;
    
    /**
     * @author klr
     * @create 2020-07-14-12:26
     */
    public class BinarySearch {
    
    
        public static void main(String[] args) {
            int[] arr = new int[]{11, 66, 22, 44,44,44,44, 99};
            System.out.println(BinarySearch.search1(arr, 0, arr.length - 1, 44).toString());
        }
    
    
        public static int search(int[] arr, int left, int right, int findVal){
    
            //如果找不到这个数,要给个出口
            if (left > right) {
                return -1;
            }
    
            int mid=(left+right)/2;
            int midVal=arr[mid];
            if(midVal>findVal){
                return search(arr, left, mid - 1, findVal);
            } else if (midVal < findVal) {
                return search(arr, mid + 1, right, findVal);
            }
            else{
                return midVal;
            }
        }
    
        //可查找所有的下标
        public static ArrayList<Integer> search1(int[] arr, int left, int right, int findVal){
    
            //如果找不到这个数,要给个出口
            if (left > right) {
                return new ArrayList<>();
            }
    
            int mid=(left+right)/2;
            int midVal=arr[mid];
            if(midVal>findVal){
                return search1(arr, left, mid - 1, findVal);
            } else if (midVal < findVal) {
                return search1(arr, mid + 1, right, findVal);
            }
            else{
    
                ArrayList<Integer> integers = new ArrayList<>();
                int temp=mid-1;
                while (temp >= 0 && arr[temp] == midVal) {
                    integers.add(temp);
                    temp--;
                }
                integers.add(mid);
                temp=mid+1;
                while (temp <= arr.length - 1 && arr[temp] == midVal) {
                    integers.add(temp);
                    temp++;
                }
                return integers;
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:二分查找

          本文链接:https://www.haomeiwen.com/subject/rlwxhktx.html