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高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

image

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析

本文已被CODING开源项目:【一线大厂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,89,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、分布式、高并发等架构技术

【附】架构书籍

  1. BAT面试的20道高频数据库问题解析
  2. Java面试宝典
  3. Netty实战
  4. 算法

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

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值