叨叨游戏网
您的当前位置:首页Java最新查找-二分查找,华为java开发面试

Java最新查找-二分查找,华为java开发面试

来源:叨叨游戏网

最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

本文已被收录

    if (left > right){

        return -1;

    }

    if (findval > minval){

        return binarySearch(arr, mid+1, right, findval);

    }else if (findval < minval){

        return binarySearch(arr, left, mid-1, findval);

    }else {

        return mid;

    }

}

}




此时数组有相同数时,只能找到一个



思路:找到值不要立马返回,像mid的左边扫描,找到相同值元素下标,加入集合,右边一样



package search;

import java.util.ArrayList;

public class BinarySearch {

public static void main(String[] args) {

    int arr[] = {1,8,10,15,15,,1000,1234};

    ArrayList<Integer> list = binarySearch(arr, 0, arr.length, 15);

    System.out.println(list);

}



public static ArrayList<Integer> binarySearch(int[] arr, int left, int right, int findval){

    int mid = (left+right)/2;

    int minval = arr[mid];

    //当left大一right时,说明没有找到

    if (left > right){

        return new ArrayList<Integer>();

    }

    if (findval > minval){

        return binarySearch(arr, mid+1, right, findval);

    }else if (findval < minval){

        return binarySearch(arr, left, mid-1, findval);

    }else {

        ArrayList<Integer> resIndex = new ArrayList<>();

        int temp = mid-1;

        while (true){

            if (temp <0 || arr[temp] != findval){

                break;

            }

            resIndex.add(temp);

            temp -= 1;

        }

        resIndex.add(mid);

        //向右扫描

        temp = mid + 1;

        while (true){

            if (temp > arr.length-1 || arr[temp] != findval){

                break;

            }

            resIndex.add(temp);

            temp += 1;

        }



        return resIndex;

    }

}

}




**插值查找**



二分查找如果找头的数,查找次数较多



int mid =left +(right-left)\*(findVal-arr\[left\])/(arr\[right\]-arr\[left\])



package search;

public class InsertSearch {

public static void main(String[] args) {

    int arr[] = new int[100];

    for (int i = 0; i < 100; i++) {

        arr[i] = i + 1;

    }

    int i = insertSearch(arr, 0, arr.length - 1, 8);

    System.out.println(i);

}

//公式int mid =left +(right-left)*(findVal-arr[left])/(arr[right]-arr[left])

最后

小编精心为大家准备了一手资料

以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术

【附】架构书籍

BATJ面试要点及Java架构师进阶资料

本文已被收录

本文已被收录

因篇幅问题不能全部显示,请点此查看更多更全内容