散列表练习

作者: 暮想sun | 来源:发表于2019-12-27 16:27 被阅读0次

    1.89 名选手参加学校运动会。为了方便记录成绩,每个选手胸前都会贴上自己的参赛号码。这 89 名选手的编号依次是 1 到 89。现在我们希望编程实现这样一个功能,通过编号快速找到对应的选手信息。

    将编号当做数组下标,数组存储选手信息,根据hash函数获取散列后下标信息

          //参加学生
        private Student[] students;
    
        //当前参加人数
        private int num;
    
        public SchoolSport() {
            this.students = new Student[89];
        }
    
        public void add(Student student) {
    
            String key = student.grade.concat(student.classNum);
            if (num < 10) {
                key = key + "0" + num;
            } else {
                key = key + num;
            }
            student.number = key;
            students[hash(key)] = student;
            num++;
        }
    
        public Student get(String number) {
            return students[hash(number)];
        }
    
        public int hash(String key) {
    
            if (StringUtils.isEmpty(key)) {
                return -1;
            }
    
            //后两位作为数组下标
            String lastStr = key.substring(key.length() - 2);
            return Integer.parseInt(lastStr);
        }
    
        private static class Student {
    
            //姓名
            private String name;
    
            //年级
            private String grade;
    
            //班级
            private String classNum;
    
            //编号
            private String number;
    
    
            public Student(String name, String grade, String classNum) {
                this.name = name;
                this.grade = grade;
                this.classNum = classNum;
            }
    
    

    2.Word 文档中单词拼写检查功能是如何实现的?

    常用的英文单词有 20 万个左右,假设单词的平均长度是 10 个字母,平均一个单词占用 10 个字节的内存空间,那 20 万英文单词大约占 2MB 的存储空间,就算放大 10 倍也就是 20MB。对于现在的计算机来说,这个大小完全可以放在内存里面。所以我们可以用散列表来存储整个英文单词词典。当用户输入某个英文单词时,我们拿用户输入的单词去散列表中查找。如果查到,则说明拼写正确;如果没有查到,则说明拼写可能有误,给予提示。

    3.假设我们有 10 万条 URL 访问日志,如何按照访问次数给 URL 排序?

    依次遍历数据,将URL为key, 访问次数为value,放入散列表,并记录最大值。再将最大值数据排序,数据较小则使用桶排序,较大可以使用快速排序。

    4.有两个字符串数组,每个数组大约有 10 万条字符串,如何快速找出两个数组中相同的字符串?

    选择一组数组数据,以字符串数据为key, value为出现次数,存入散列表。再遍历两一个字符串,如果查找散列表数据,如果value大于0,则存在相等字符串。

    相关文章

      网友评论

        本文标题:散列表练习

        本文链接:https://www.haomeiwen.com/subject/jfgcoctx.html