java笔试做题笔记

1.设哈希表长度为11,哈希函数H(K)=(K的第一个字母在字母表中的序号)MOD11,若输入顺序为(D,BA,TN,M,CI,I,K,X,TA),采用内散列表,处理冲突方法为线性探测法,要求构造哈希表,在等概率情况下查找成功平均查找长度为(C)

A. 4

B. 3

C. 20/9

D. 23/9

解析:

线性探测:本位置x被占据,就寻找下一位x+1,直至找到空位置
(注意看清题目“K的第一个字母在字母表中的序号 ”)

 

 9个数字,共探测20次 -> 20/9


2.已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行__n(n+1)/2__次探测。

解析:

至少需要多少次探测,假设在上一次探测的基础上,每进行一次二次探测都能直接找到对应的位置。
第一个:直接找到位置,入坑,1次;


第二个:和第一个同hash,找到的位置被第一个给占了,通过二次探测直接找到下一个,入坑,2次;


第三个:第一个被占了,第二个也被占了,通过二次探测直接找到第三个,入坑,3次;



第n个:n次;

1 + 2 + 3 + ...... + n 
一共:(1+n)*n / 2 次


3.采用哈希表组织100万条记录,以支持字段A快速查找,则(C

A.理论上可以在常数时间内找到特定记录

B.所有记录必须存在内存中

C.拉链式哈希曼最坏查找时间复杂度是O(n)

D.哈希函数的选择跟A无关

 


4.颜色分类 

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
示例 2:

输入:nums = [2,0,1]
输出:[0,1,2]
示例 3:

输入:nums = [0]
输出:[0]
示例 4:

输入:nums = [1]
输出:[1]

代码:

class Solution {
    public void sortColors(int[] nums) {
        int num0 = 0, num1 = 0, num2 = 0;
        for(int i = 0; i < nums.length; i++) {
            if(nums[i] == 0) {
                nums[num2++] = 2;
                nums[num1++] = 1;
                nums[num0++] = 0;
            }else if(nums[i] == 1) {
                nums[num2++] = 2;
                nums[num1++] = 1;
            }else {
                nums[num2++] = 2;
            }
        }
    }
} 

解析:三指针法

循环遍历数组,遇到2先填入,再让num2指针向后挪一个,给新来的2让位置;遇到1,num2给定2,num1给定1,再让num1和num2向后挪,给新来的1让位置;遇到0,num2给定2,num1给定1,num0给定0,三个指针都向后挪,给新来的0让位置。

5.一棵二叉树的先序遍历为EFHIGJK,中序遍历为HFIEJKG,则后序遍历为 HIFKJGE

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值