代码随想录day6——hash表(java)

本文介绍了Java中的Hash表(包括数组和set)在处理字符串操作中的应用,如字符计数(Anagram检测)和数组去重(Intersection问题)。重点讲解了如何利用Set的特性进行高效数据处理。
摘要由CSDN通过智能技术生成

这个知识点陌生,故形式写成知识点+题目(ps:今天只写了三个题,想打lol了,最后一个题暂时放弃)

总用时:1:53

1.hash表类型:

hash概念不再赘述,可以理解成数组;

主要包含三个重要的应用:

  • 数组
  • set (集合)
  • map(映射)

今天只学了前两种,数组和set;

1.1数组:

数组比较简单,主要应用就是将数组下标作为出现的数字,用key【i】记录次数,这可能就会涉及到hash表的无限长度问题。

无长度限度,可以用数组,如:力扣242

package day6;


class Solution {
    public boolean isAnagram(String s, String t) {
        int []record=new int[26];
        //补充:charAt;返回字符串指定位置字母;
        for(int i=0;i<s.length();i++){
            //每一步遍历字符串,让该字符串个数++
            record[s.charAt(i)-'a']++;
        }
        for(int j=0;j<t.length();j++){
            //每一步遍历字符串,让该字符串个数++
            record[t.charAt(j)-'a']--;
        }
        for(int k:record){
            if(k!=0)
                return false;
        }
    return true;
    }

    public static void main(String[] args) {
        Solution p=new Solution();
       // p.isAnagram()
    }
}
//总结:hash表初步用法,数组本身就是hash表

1.2set集合的使用

这个使用有个关键点,集合的不重复性,当题目涉及到这个点,即可以考虑使用

力扣349

这里的映射关系非常秒,运用set类直接帮助去重,然后使用该set判断是否在第二个数组中存在

 内部的一些语法比较重要:java版

(1)创建set:

Set<Integer> set1 = new HashSet<>();

(2)添加到set:

set1.add()

(3)比较set:

set1.contains()

(4)转化回数组:(较为复杂)

return resSet.stream().mapToInt(x -> x).toArray();

该题目的总代码如下:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        //这是我想不到的特殊条件(其实其他的也没想到)
        if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
            return new int[0];
        }
        //思路:用Set<Integer> set1 = new HashSet<>();,set映射去重,然后直接比较两个set表;
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        for(int i:nums1){
            set1.add(i);
        }
        for(int j:nums2){
            if(set1.contains(j)){
                set2.add(j);
            }

        }
        int []arr=new int[set2.size()];
        int j=0;
        for(int i:set2){
            arr[j++]=i;
        }
        return arr;

    }
}

如上,共勉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值