代码随想录算法训练营第六天 | 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

哈希表理论基础

Java中的哈希结构

hashMap

概念
常用函数

treeMap

概念
常用函数

hashSet

概念
常用函数

对比

242.有效的字母异位词

每个字母出现的次数存储至一个长度为26的数组,再逐位进行比较

class Solution {
    public boolean isAnagram(String s, String t) {
         //使用数组做哈希表
         int[] records=new int[26];
         int[] recordt=new int[26];
         for(int i=0;i<s.length();i++){
             records[s.charAt(i)-'a']+=1;
         }
         for(int i=0;i<t.length();i++){
             recordt[t.charAt(i)-'a']+=1;
         }
         for(int j=0;j<records.length;j++){
             if(records[j]!=recordt[j]){
                 return false;
             }
         }
         return true;
    }
}

349. 两个数组的交集

先利用哈希表简化数组,再判断一个表里的元素是否与另一个相交

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        List<Integer> result = new ArrayList<>();
        HashMap<Integer, Integer> nums1Map = new HashMap<Integer, Integer>();
        HashMap<Integer, Integer> nums2Map = new HashMap<Integer, Integer>();
        for(int i=0;i<nums1.length;i++){
            if(!nums1Map.containsKey​(nums1[i])){
                nums1Map.put(nums1[i],1);
            }
        }
        for(int i=0;i<nums2.length;i++){
            if(!nums2Map.containsKey​(nums2[i])){
                nums2Map.put(nums2[i],1);
            }
        }
        if(nums1Map.size()<=nums2Map.size()){
            for(Integer key : nums1Map.keySet()) {
                if(nums2Map.containsKey​(key)){
                    result.add(key);
                }
            }
        }else{
            for(Integer key : nums2Map.keySet()) {
                if(nums1Map.containsKey​(key)){
                    result.add(key);
                }
            }
        }
        int[] results = new int[result.size()];
        for(int i = 0;i<result.size();i++){
            results[i] = result.get(i);
            }
        return results;
    }
}

202. 快乐数

//求和过程中sum会重复出现则会无限循环,不循环则一定可以到1
class Solution {
    public boolean isHappy(int n) {
        HashSet<Integer> happy = new HashSet<>();
        while(!happy.contains(n)&&n!=1){
            happy.add(n);
            n=getNextNumber(n);
        }
        return n==1;

    }
    private int getNextNumber(int n){
         int res = 0;
        while (n > 0) {
            int temp = n % 10;
            res += temp * temp;
            n = n / 10;
        }
        return res;
    }
}

1.两数之和


class Solution {
    public int[] twoSum(int[] nums, int target) {
        List<Integer> keyList = new ArrayList<>();
        int[] result;
        HashMap<Integer, Integer> number = new HashMap<Integer,Integer>();
        for(int i=0;i<nums.length;i++){
            number.put(i,nums[i]);
        }
        for (Integer i : number.keySet()) {
            int value=number.get(i);
            if(number.containsValue(target-value)){
                for(int key=i+1;key<number.size();key++){
                    if(number.get(key)==target-value){
                        result=new int[]{i,key};
                        return result;
                    }
                }

                
            }
        }
        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没脑袋的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值