首页 > 其他分享 >代码随想录day06

代码随想录day06

时间:2023-06-12 20:45:17浏览次数:46  
标签:set return nums int 代码 随想录 day06 哈希 new

 

第三章 哈希表part01

242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

 

当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。

242.有效的字母异位词

注意点:字符串长度表示方法 s.length()要带括号

    字符串取字符 s.charAt(index)

    ASCII码相减运算 'b' - 'a' 

class Solution {
    public boolean isAnagram(String s, String t) {
        // 哈希法 数组实现
        // 记录数组,记录26个字母
        int record[] = new int[26];
        // s的每个字母出现的次数 ++
        for (int i = 0; i < s.length(); i++){
            record[s.charAt(i) - 'a']++;
        }
        // t的每个字母出现的次数 --
        for (int i = 0; i < t.length(); i++){
            record[t.charAt(i) - 'a']--;
        }
        // 看记录数组是否全0
        for (int count : record){
            if (count != 0){
                return false;
            }
        }
        return true;
    }
}

 

349. 两个数组的交集

个人思路是延续上一题,用大小为1001的数组记录元素是否出现,但是去重问题解决不了。解决方案:额外记录变量 <span class="katex"><span class="katex-mathml">pre<span class="katex-html"><span class="base"><span class="strut"><span class="mord text"><span class="mord textit">表示上一次加入答案数组的元素

 

用哈希set解决

注意点:不能用count计数结果元素去创建结果数组,还是去重问题,用ansSet.size()即可

    创建哈希set的写法 Set<Integer> set = new HashSet<>()

    哈希set判断是否包含元素i:set.contains(i)

    哈希set添加元素i:set.add(i)

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        // 哈希set
        Set<Integer> set1 = new HashSet<>();
        // 结果
        Set<Integer> ansSet = new HashSet<>();
        // 遍历nums1
        for (int i : nums1){
            set1.add(i);
        }
        // 遍历nums2
        for (int i : nums2){
            if (set1.contains(i)){
                ansSet.add(i);
            }
        }
        int answer[] = new int[ansSet.size()];
        int x = 0;
        for (int i : ansSet){
            answer[x] = i;
            x++;
        }
        return answer;
    }
}

 

202. 快乐数

注意点:取n的各位的平方和的写法

class Solution {
    public boolean isHappy(int n) {
        // 哈希set存储已出现的数
        Set<Integer> sums = new HashSet<>();
        sums.add(n);
        // 数不为1则继续循环取各位的平方和
        while (n != 1){
            n = sumofPower(n);      // 下一个数
            if (sums.contains(n)){  // 循环出现
                return false;
            }else{
                sums.add(n);        // 加入哈希set
            }
        }
        return true;                // 变为1,返回true
    }
    // 取n的各位的平方和
    public int sumofPower(int n){
        int ans = 0;
        while (n > 0){          // 终止条件
            int tmp = n % 10;   // 取个位
            ans += tmp * tmp;   // 平方和
            n = n / 10;         // n去掉个位
        }
        return ans;
    }
}

 

1. 两数之和

方法1.暴力法 两层for循环

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] ans = new int[2];
        for (int i = 0; i < nums.length -1; i++ ){//两层for循环暴力求解
            for (int j = i +1 ; j < nums.length; j++){
                if (nums[i] + nums[j] == target){
                    ans[0] = i;
                    ans[1] = j;
                    break;
                }
            }
        }
        return ans;
    }
}

方法2.创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。

注意点:HashMap的写法:Map<Integer, Integer> hashMap = new HashMap<Integer, Integer>()

HashMap是Java中最常用的映射类型的数据结构。主要特点是:

1. 存储键值对(key-value)映射。key和value可以是任何引用类型。

2. 根据键快速查询值。底层采用哈希表,查询效率很高。

3. 键不重复,值可以重复。

4. 线程不安全,效率高。

常见的HashMap方法有:

1. put(key, value): 添加键值对。如果key已存在,更新值。

2. get(key): 根据键查询值。

3. remove(key): 根据键移除键值对。

4. size(): 返回映射个数。

5. isEmpty(): 判断是否为空。

6. containsKey(key): 判断是否包含键。

7. containsValue(value): 判断是否包含值。

class Solution {
    public int[] twoSum(int[] nums, int target) {// 哈希map
        Map<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++){                      // 遍历数组
            if (hashMap.containsKey(target - nums[i])){             // 是否包含键
                return new int[]{i, hashMap.get(target - nums[i])}; 
            }
            hashMap.put(nums[i], i);                                // 加入map
        }
        return new int[0];
    }
}

 

标签:set,return,nums,int,代码,随想录,day06,哈希,new
From: https://www.cnblogs.com/allendon/p/17475841.html

相关文章

  • mybatisplus自动生成代码
    官网:https://baomidou.com/pages/24112f/1.引入依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <dependency> ......
  • 尚医通-day06【医院模拟系统接口详细步骤】(内附源码)
    第01章-医院系统1、业务功能描述资料:资料>医院模拟系统>尚医通API接口文档.docx1.1、平台方参考《尚医通API接口文档.docx》进行业务接口的开发,接收医院方的接口调用,将医院信息、科室信息、排班信息等数据存入MongoDB。1.2、医院方每个医院有自己的业务平台,需参考《尚医通AP......
  • 低代码赛道拥挤 生态聚合成为破局关键
    在云计算和移动互联网的强劲推动下,企业数字化转型的步伐正在加速,对于软件应用开发的需求也呈现出爆发式的增长。这样的背景下,低代码平台凭借其独特的优势迅速崛起并引发了业界的广泛关注。自2020年以来,低代码领域已成为投资热点,至少有20家公司在这一领域获得了资本的青睐,其中一些......
  • 【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)
    漏洞简介ApacheKafka是一个分布式数据流处理平台,可以实时发布、订阅、存储和处理数据流。KafkaConnect是一种用于在kafka和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于SASLJAAS配置和SASL协议的任意Kafka客户端,对KafkaConnectworker创建或修改连接器......
  • python使用HTTP隧道代理代码示例模板
    以下是使用HTTP隧道代理的Python代码示例模板:```pythonimportrequests#设置代理服务器地址和端口号proxy_host="your_proxy_host"proxy_port="your_proxy_port"#设置代理服务器的用户名和密码(如果需要)proxy_username="your_proxy_username"proxy_password="your_proxy_p......
  • PHP使用HTTP隧道代码示例模板
    以下是使用PHP实现HTTP隧道的代码示例模板:```php<?php//目标网站的URL$targetUrl='ExampleDomain';//获取客户端请求的HTTP方法和请求头$method=$_SERVER['REQUEST_METHOD'];$headers=getallheaders();//创建与目标网站的连接$ch=curl_init();curl_setopt($ch,CURLOPT......
  • Web安全测试—查看网页的HTML源代码
      浏览器中浏览网页,查看网页的源代码,是测试中很简单的,很基本的方法,也是非常值得做的。查看源代码最基本的两项作用:可以帮助你发现最明显的安全问题,可以帮助为将来的测试建立一个比较的基准。也可以帮忙你对比攻击失败前后的源代码,调整你的输入,了解到通过的和没有通过,可以再次......
  • 代理IP出现错误代码300是什么意思
    HTTP代理是我们在使用网络时常用的工具之一,它可以帮助我们隐藏IP地址、加快请求响应速度等,但在使用HTTP代理时有时候会遇到各种错误码。其中,错误码300也是比较常见的一种。那么,这个错误码代表什么情况呢?本文将为您介绍相关内容。首先,HTTP错误码300属于重定向响应状态码。它......
  • 代理IP出现错误代码206是什么意思
    HTTP代理是一种广泛使用的网络访问方式,然而在实际应用中,常常会遇到多种错误码,其中206错误码也经常出现。本文旨在向读者介绍206错误码的含义以及如何处理此类问题。206错误码是HTTP协议定义的一种状态码,它表示了服务器成功处理了部分GET请求。通俗来说,就是当我们用HTTP代理......
  • 90%的人会遇到性能问题,如何用1行代码快速定位?
    阿里妹导读:在《如何回答性能优化的问题,才能打动阿里面试官?》中,主要是介绍了应用常见性能瓶颈点的分布,及如何初判若干指标是否出现了异常。今天,齐光将会基于之前列举的众多指标,给出一些常见的调优分析思路,即:如何在众多异常性能指标中,找出最核心的那一个,进而定位性能瓶颈点,最后进行性......