备战春招的第一天(含滴滴笔试题)

大家好,我是一个不愿透露学校名称的大四学生,你可以听着周杰伦的歌来读我这篇博客(如果你不知道听什么那么我推荐一首简单爱),这一步非常重要哦,我希望我的文章可以帮助到和我处于在同一起跑线的人,或者是比我的起跑线高但又很迷茫的人,经过这一次的秋招,让我有了很多的感悟。我会将我经历的事情逐一的讲述给大家,同时我希望大家在我之后的文章与我共同学习,一起收割offer!!

img

八股复习

相应八股知识点可以去ProcessOn中搜索我的模板(Java中的周杰伦)我这里复习的知识点那里都有,希望可以帮助到大家!!!!

Java集合

  1. 集合的层级问题(介绍一下集合)

  2. HashMap的一系列问题

    HashMap的底层数据结构?

    HashMap线程安全问题?

    HashMap在1.7和1.8中的区别?

    为什么HashMap扩容要扩容2倍?

    HashMap的扩容机制?

    HashMap的put和get流程?

    1.8中为什么要引入红黑树?

    HashMap与HashTable的区别?

  3. ArrayList和LinkedLis的相关问题

    ArrayList与LinkedList的区别?

    ArrayList的扩容机制?

    使用for循环删除ArrayList当中元素会出现什么问题?

  4. LinkedHashMap底层的数据结构?

  5. comparable与comparator的区别?

  6. LinkedHashSet和HashSet和TreeSet的区别以及底层数据结构?

算法

今天做了滴滴的笔试题

两道改编力扣的题

1. 最长递减子序列(对应力扣中的最长递增子序列)

public static int test(int[] arr){
        int n=arr.length;
//        dp数组定义为 当前位置的最长递减子序列的长度
        int[] dp=new int[n];
//        初始化最短为自己也就是1
        Arrays.fill(dp,1);
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) {
//                计算每个位置的最长递减子序列
                if (arr[j]>arr[i]) {
                    dp[i]=Math.max(dp[i],dp[j]+1);
                }
            }
        }
//        进行排序,返回最大值
        Arrays.sort(dp);
        return dp[n-1];
}

2. X星大学 (对应力扣中的1135)使用并查集进行求解的

我认为并查集很重要,我已经在笔试中碰到过很多次了,模板很简单主要还是在思想的使用上。

public class Test {

    public static void main(String[] args) {
        int[][] arr=new int[3][3];
        arr[0][0]=1;
        arr[0][1]=2;
        arr[0][2]=50;
        arr[1][0]=1;
        arr[1][1]=3;
        arr[1][2]=80;
        arr[2][0]=2;
        arr[2][1]=3;
        arr[2][2]=70;
        int i = test( arr,3);
        System.out.println(i);
    }


    public static int test(int[][] arr,int n){
//        按照价格进行排序
         Arrays.sort(arr,(a,b)->a[2]-b[2]);
         int res=0;
        UF uf = new UF(n);
        for (int[] ints : arr) {
//            检验是否连通,如果没有连通将其进行连通
            if (uf.find(ints[0])!=uf.find(ints[1])){
                uf.union(ints[0],ints[1]);
                res+=ints[2];
            }
//            知道检测出一条路径可以连接所有点时退出
            if (uf.count==1){
                return res;
            }
        }
//        没有连通的
        return -1;
    }



}
class UF{
//    连通分量的个数
    public int count;
//    存储每个节点的父节点
    private int[] parent;
//    记录每棵树重量
    private int[] size;

    public UF(int count){
        parent=new int[count+1];
        size=new int[count+1];
        for (int i = 0; i < count; i++) {
            parent[i]=i;
            size[i]=1;
        }
        this.count=count;
    }

    public int find(int x){
        if (x != parent[x]){
            parent[x]=find(parent[x]);
        }
        return parent[x];
    }
    public void union(int p,int q){
        int p1=find(p);
        int q1=find(q);
        if (p1==q1){
            return;
        }
        if (size[p1]>size[q1]){
            parent[q1]=p1;
            size[p1]+=size[q1];
        }else {
            parent[p1]=q1;
            size[q1]+=size[p1];
        }
        count--;
    }
    public boolean connected(int x,int y){
        int l=find(x);
        int r=find(y);
        return l==r;
    }


}

结尾

如果你感觉写的不错,点个赞也是可以的。。。。

希望你的每一天都可以精彩,希望你的每一天可以让你更加精彩!

相应八股知识点可以去ProcessOn中搜索我的模板(Java中的周杰伦)我这里复习的知识点那里都有,希望可以帮助到大家!!!!

同时我模板里的java相关知识如果有不对的可以评论或者私信,大家一起进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值