首页 > 编程语言 >算法学习day06哈希表part01-242、349、202、1

算法学习day06哈希表part01-242、349、202、1

时间:2023-07-04 23:11:49浏览次数:43  
标签:202 return part01 day06 util int 数组 new public

package SecondBrush.Hash;
/**
 * 242.有效字母异位词
 * 现在看到这个题目能想到怎么做,但是具体不知道怎么写
 * 大致思路自己先描述一下:
 * 就是建立一个hash表,然后遍历s,写进表中,遍历t,减去对应的数
 * hash表就可以理解为数组
 */

public class ValidAnagram_242 {
    public boolean is_anagram(String s, String t) {
        int[] recode = new int[26];

        for (int i = 0; i < s.length(); i++) {
            recode[s.charAt(i) - 'a']++;
        }

        for (int i = 0; i < t.length(); i++) {
            recode[t.charAt(i) - 'a']--;
        }
        for (int count : recode) {
            if (count != 0) {
                return false;
            }
        }
        return true;
    }

}
package SecondBrush.Hash;

import java.util.HashSet;
import java.util.Set;

/**
 * 349. 两个数组的交集
 * 刚开始是没思路,只能看一下题解,
 * 梳理一下思路:
 * 定义两个set,
 * 遍历第一个数组,存入set中,然后遍历第二个数组,判断哈希表中是否有该元素,
 * 如果有将该元素加入至新set中,将set转成数组,返回数组
 */

public class IntersectionOfTwoArrays_349 {
    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<Integer> resSet = new HashSet<>();
        //遍历数组1
        for (int i : nums1) {
            set1.add(i);
        }
        //遍历数组2的过程中判断哈希表中是否存在该元素
        for (int i : nums2) {
            if (set1.contains(i)) {
                resSet.add(i);
            }
        }

        //方法2:另外申请一个数组存放setRes中的元素,最后返回数组
        int[] arr = new int[resSet.size()];
        int j = 0;
        for (int i : resSet) {
            arr[j++] = i;
        }

        return arr;
    }
}
package SecondBrush.Hash;

import java.util.HashSet;
import java.util.Set;

/**
 * 202. 快乐数
 * 快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,
 * 也可能是 无限循环 但始终变不到 1。
 * 如果 可以变为  1,那么这个数就是快乐数。
 *
 * 刚看到还是没思路,操。
 * 首先需要设计怎么计算每次每个位置上的平方和,想不起来,之前明明看过一遍
 *
 * */
public class HappyNumber_202 {

    public boolean isHappy(int n) {
        Set<Integer> record = new HashSet<>();
        while (n != 1 && !record.contains(n)) {
            record.add(n);
            n = getNextNum(n);
        }
        return n == 1;
    }
    public int getNextNum(int n){
        int sum = 0;
        while (n > 0) {
            int temp = n % 10;
            sum += temp * temp;
            n = n / 10;
        }
        return sum;
    }

}
package SecondBrush.Hash;

import java.util.HashMap;
import java.util.Map;

/**
 * 1.两数之和
 * 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
 * 再次看到的时候,还是写不出来,知道具体的思想。
 * */
public class TwoSum_1 {
    public int[] twoSum(int[] nums, int target){
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i< nums.length; i++) {
            if(map.containsKey(target - nums[i])) {
                return new int[] {map.get(target-nums[i]),i};
            }
            map.put(nums[i], i);
        }
        throw new IllegalArgumentException("No two sum solution");
    }

}

 

标签:202,return,part01,day06,util,int,数组,new,public
From: https://www.cnblogs.com/lipinbigdata/p/17527318.html

相关文章

  • 2023年07月编程语言流行度排名
    点击查看最新编程语言流行度排名(每月更新)2023年07月编程语言流行度排名编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自谷歌Trends如果您相信集体智慧,那么流行编程......
  • LeetCode 周赛 352(2023/07/02)一场关于子数组的专题周赛
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和[BaguTreePro]知识星球提问。往期回顾:LeetCode单周赛第350场·滑动窗口与离散化模板题单周赛352概览T1. 最长奇偶子数组(Easy)标签:滑动窗口、枚举T2. 和等于目标值的质数对(Medium)标签:质......
  • 2023年07月IDE流行度最新排名
    点击查看最新IDE流行度最新排名(每月更新)2023年07月IDE流行度最新排名顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends如果您相信集体智慧,TopIDE索引可以帮助您决定在软件开发项目中使用......
  • 2023年07月在线IDE流行度最新排名
    点击查看最新在线IDE流行度最新排名(每月更新)2023年07月在线IDE流行度最新排名TOP在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends如果您相信集体智慧,那么TOPODE索引可以帮助您决定在......
  • 2023年07月数据库流行度最新排名
    点击查看最新数据库流行度最新排名(每月更新)2023年07月数据库流行度最新排名TOPDB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数据来自谷歌Trends如果您相信集体智慧,那么TOP......
  • 2023.7.4打卡
    2023.7.4(1)、今天上午学车学了四个小时,复习了500个高中英语词汇,看了场辩论赛,学了会Java,晚上打了会球,等会还要去和同学聚会。(2)、明天早上去学车,中午回来打算自己煮饭吃,家里人都不在家,学一会Java,再看看《大道至简》。(3)、今天没遇到什么问题。......
  • Day01,2023.07.04
    行程9:00到达上海信息安全测评认证中心(黄浦区陆家浜路1308号)。9:30   签订协议,领取电脑、本子等。10:20  确认负责老师,前往所在处:上海电气集团数字科技有限公司(闵行区合川路2555号2号楼)。11:00  到达,听老师与公司负责人交谈。......
  • 2023年暑假集训总结/7.4
    2023年暑假集训总结/7.3预估成绩:100+20+10+20=150实际成绩:0+61+19+0=80T1最大公约数题意:有n个数,取n-1个数,求可以得到的最大gcd。思路&做法:有一个思路是将所有数字质因数分解,然后对于每一个质数,判断他是否在这n个数中“拖了后腿”,这样就可以O(nk)地求出答案,k是质因数的个......
  • [总结]2023-7-4A组模拟赛
    [总结]2023-7-4A组模拟赛P1心路历程开题看到T1大概是个结论、T2似乎是倒序而且暴力可以拿很多分、T3不会、T4没想法。先想T1,以为是一个结论题。想了很久,没有结果,然后就在怀疑自己是否能做出来这种结论题。之后就弃疗了。看到T2,40%的很好拿,50%不妨考虑离线之后倒序,用并查集维......
  • 2023容器网络趋势:CNI网络插件逐渐普及,Kube-OVN受欢迎度持续攀升
    今年,Kube-OVN社区联合OSCHINA、云原生社区共同发起了《2022-2023容器网络使用情况调研》,得到了大批K8s/容器网络技术人员的关注。本调研旨在更加直观地了解各行业企业容器网络的使用现状,以及Kube-OVN在社区用户中的使用情况,以便更全面地评估容器网络发展方向,更有针对性地规划Kub......