校招准备(十一):数据结构与算法

本文详细探讨了数据结构与算法在面试中的重要性,涵盖了常见数据结构如链表、树、排序算法,重点讲解了LRU算法、大数相乘、动态规划问题,包括找钱问题、01背包、最长上升子序列等,并提到了图算法、字符串相关算法和哈希函数设计。还讨论了时间复杂度的计算,是校招准备的重要参考资料。
摘要由CSDN通过智能技术生成

1.常见的数据结构和算法

4.把[1, 10^15]的数映射到[1, 10^6],哈希函数怎么设计?如果数据分布不均匀,1出现1次,2出现2次,n出现n次,哈希该怎么设计?哈希冲突怎么解决? 
hashmap原理。
6.怎么在海量数据中找出重复次数最多的一个
https://blog.csdn.net/u010601183/article/details/56481868

1.1归并集

 

1.2布隆过滤器

1.3lru算法

1.使用双向链表实现(点击链接,我就不再贴代码了)

2.使用LinkedHashMap

1.4滑动窗口算法:

1.4.1.最长无重复子串

1.5定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))

1.6大数相乘

        9  8
×       2  1
-------------
       (9)(8)  <---- 第1趟: 98×1的每一位结果 
  (18)(16)     <---- 第2趟: 98×2的每一位结果 
-------------
  (18)(25)(8)  <---- 这里就是相对位的和,还没有累加进位 

这里唯一要注意的便是进位问题,我们可以先不考虑进位,当所有位对应相加,产生结果之后,再考虑。从右向左依次累加,如果该位的数字大于10,那么我们用取余运算,在该位上只保留取余后的个位数,而将十位数进位(通过模运算得到)累加到高位便可,循环直到累加完毕。

/**
 * 大数相乘方法二
 */
public static int[] bigNumberMultiply2(int[] num1, int[] num2){
    // 分配一个空间,用来存储运算的结果,num1长的数 * num2长的数,结果不会超过num1+num2长
    int[] result = new int[num1.length + num2.length];

    // 先不考虑进位问题,根据竖式的乘法运算,num1的第i位与num2的第j位相乘,结果应该存放在结果的第i+j位上
    for (int i = 0; i < num1.length; i++){
        for (int j = 0; j < num2.length; j++){
            result[i + j + 1] += num1[i] * num2[j];	 // (因为进位的问题,最终放置到第i+j+1位)
        }
    }

    //单独处理进位
    for(int k = result.length-1; k > 0; k--){
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值