当前位置: 首页 > article >正文

leetcode hot100_part01_哈希

1.两数之和

        遍历数组,map中存在target - nums[i]就返回结果,不存在就把当前元素存入map;

49.字母异位词分组

        分组,怎么分,用hashMap, key为每一组的标识,value为每一组包含的字符串(属于同一组的);那么key就有两种选择了

        key可以是某一组中某个字符串排好序的字符串x,遍历每个字符串,排序如果和x一样,加入该分组;否则就是一个新的分组

        key可以用某组字符串的特征构造新的字符串,遍历,对于串s,获取它的每个字符出现的次数,比如abbc,对应的分组的key就是a1b2c3(字母+出现次数);对于后续的某个串如果拆解后和key一样,就是一组,否则是新的一组;

128.最长连续序列

9/11

        假设数排好了序,那么会有很多的连续序列,我们对其中一个序列统计长度时,要从头开始统计,才可以在遍历过程中对每个序列只统计一次; 如果从中间开始统计效率就太低了,遍历到某个序列的不同元素时,都会对这个序列进行统计;

        还有就是,对于哈希表里的重复元素,看示例2,001的最长连续序列算2

之前的做法:

4/14/2024

        这是前两天做一半的题目了。这题给我的教训就是用哈希表的时候一定一定要考虑重复元素的问题!!!!

        这题让我想到了最长递增子序列,只是名字有点像。子序列和子数组还不一样一个连续一个不连续。自己一开始的做法是把每个元素作为key,是否被访问过作为value来存入hash表里,然后对数组元素进行遍历,访问了首先value为true,然后双指针分别标记前一个数 nums-1 和后一个数nums+1 ,分别向前和向后迭代更新,指针相减即为长度,迭代最大长度即可。

        注意boolean的布尔类型为Boolean

        一个for循环引发的错误,但是你这个方法也好慢啊。。

class Solution {
    public int longestConsecutive(int[] nums) {
        HashMap<Integer, Boolean> hash = new HashMap<>();
        int res = 0;
        for(int x : nums){
            hash.put(x, false);
        }
        for(int i = 0; i < nums.length; i++){
            // 原来的这个if条件写在了for循环的条件里
            // 这样不就只找了一次,
            if(hash.get(nums[i]) == false){
                //我说怎么慢,访问这个元素也要改为true,之前忘了
                hash.replace(nums[i], true);
                int low = 0;
                int fast = 0;
                int cur = nums[i];
                while(hash.containsKey(cur - 1)){
                    low--;
                    hash.replace(cur - 1, true);
                    cur = cur - 1;
                }
                // 重置cur;
                // 相同元素?
                cur = nums[i];
                while(hash.containsKey(cur + 1)){
                    fast++;
                    hash.replace(cur + 1, true);
                    cur = cur + 1;
                }
                int p = fast - low + 1;
                res = res > p ? res : p;
            }
            else continue;   
        }
        return res;

    }
}


http://www.kler.cn/a/300680.html

相关文章:

  • Navicat 17 功能简介 | 商业智能 BI
  • AUTOSAR从入门到精通-无人驾驶网约车(Robotaxi)
  • 【ArcGIS微课1000例】0140:总览(鹰眼)、放大镜、查看器的用法
  • 计算机网络-物理层
  • Python自动化测试中定位隐藏菜单元素的策略
  • MERN全栈脚手架(MongoDB、Express、React、Node)与Yeoman详解
  • Spring和Spring FrameWork有什么关系?两者是同一个东西吗?
  • 白帽SEO搜索引擎pc端怎么引流
  • Chrome和Chromium浏览器有什么不同?
  • knowLedge-在组件的第一次创建时执行某个方法,而在后续的创建中不执行:
  • 智能路口安全预警系统:精准提醒降低事故发生率
  • 继收购西门子物流自动化后,丰田又投资一家AGV公司,智能物流版图已极其夸张...
  • less和css在写法上有什么区别吗?
  • yield return request.SendWebRequest()
  • 9.11近日工作踩坑
  • 828华为云征文 | 华为云Flexusx实例,高效部署Servas书签管理工具的优选平台
  • Dynamics CRM Ribbon Workbench-the solution contains non-entity components
  • webGIS后端程序员学习路线
  • 基于SSM的志愿者管理系统(含源码+sql+视频导入教程+文档+PPT)
  • 说说Canny边缘检测算子?
  • 语音转文字工具全解析
  • 简述离线安装docker
  • Golang | Leetcode Golang题解之第392题判断子序列
  • Android 11 FileProvider的使用和限制
  • 【redis】redis的特性和主要应用场景
  • 为什么学霸都很淡定,学渣心浮气躁