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

硅基计划 4.0 算法 哈希表

图 (924)


文章目录

    • 1. 两数之和
    • 2. 判断是否为字符重排
    • 3. 存在重复元素I
    • 4. 存在重复元素II
    • 5. 字母异位词分组


1. 两数之和

题目链接
这一题我们转下思路,我们之前是每次固定一个数,向后遍历
这次我们每次固定一个数,向前遍历,我们每次固定的时候说白了就是向前搜寻符合要求的数
比如[1,2,3,4] target = 4
当我们遍历到数字3的时候,我们固定数字3,向前去寻找3-4 = -1的数
每次都是这样,那我们可不可以把之前的值使用哈希表存起来呢,这样我们每次向前找的时候,我们根据想要求的值,可以直接获取到我们要求的值的下标,存在就返回
如果不存在,我们就把数字放入,为后续固定别的数向前遍历提供依据

class Solution {public int[] twoSum(int[] nums, int target) {HashMap<Integer,Integer> hashMap = new HashMap<>();for(int i = 0;i < nums.length;i++){int num = target-nums[i];if(hashMap.containsKey(num)){return new int[]{i,hashMap.get(num)};}hashMap.put(nums[i],i);}return new int[]{-1,-1};}
}

2. 判断是否为字符重排

题目链接
这一题其实也很简单,我们使用模拟哈希表先遍历一个字符,统计其出现次数
再去遍历另一个字符,看看是不是都出现了,但凡当前字符在之前哈希表遍历的时候没有出现
我们就可以认为其是新的字符,不符合也要求,直接返回false,否则直到遍历完返回true

class Solution {public boolean CheckPermutation(String s1, String s2) {if(s1.length() != s2.length()){return false;}int [] hash = new int[26];for(int i = 0;i < s1.length();i++){hash[s1.charAt(i)-'a']++;}for(int i = 0;i < s2.length();i++){char ch = s2.charAt(i);if(hash[ch-'a'] > 0){hash[ch-'a']--;}else{return false;}}return true;}
}

3. 存在重复元素I

题目链接

class Solution {public boolean containsDuplicate(int[] nums){Set<Integer> hash = new HashSet<>();for(int x : nums){if(hash.contains(x)) return true;hash.add(x);}return false;}
}

4. 存在重复元素II

题目链接

class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {TreeMap<Integer,Integer> treeMap = new TreeMap<>();//数值,对应下标for(int i = 0;i < nums.length;i++){if(treeMap.containsKey(nums[i])){int retLength = i-treeMap.get(nums[i]);if(retLength <= k){return true;}}treeMap.put(nums[i],i);}return false;}
}

5. 字母异位词分组

题目链接
这一题我们的思路是这样的
我们先把两个字符串转换成数组,然后我们进行排序,再去分别比较就好寻找对应的组进行插入就好

<String --> key值,String[] --> 使用List去拼接>
每次从数组中取出一个字符串,按照字典顺序进行排序
再去哈希表中寻找符合其顺序的key值位置,如果不存在就创建一个,否则直接拼接就好
class Solution {public List<List<String>> groupAnagrams(String[] strs) {HashMap<String,List<String>> hashMap = new HashMap<>();for(String str:strs){char [] ch = str.toCharArray();Arrays.sort(ch);String s = new String(ch);if(!hashMap.containsKey(s)){//说明还不存在这个key值,需要创建hashMap.put(s,new ArrayList());}hashMap.get(s).add(str);}//直接把哈希表全部展开return new ArrayList(hashMap.values());}
}

希望本篇文章对您有帮助,有错误您可以指出,我们友好交流

END
http://www.dtcms.com/a/423969.html

相关文章:

  • java源码英文翻译
  • 算法题(221):多重背包(二)
  • sched-domain
  • 企业网站建设中企动力免费的网页游戏
  • python(77) python脚本与jenkins pipeline交互的5种方式
  • 网站多久备案一次百度灰色关键词排名
  • 内江建设局网站注册网站刀具与钢材范围
  • 如何将安卓应用迁移到鸿蒙?
  • wordpress商业网站wordpress虚拟
  • dede 网站名称 空的团员建设网站
  • C++(Qt)软件调试---Linux动态库链接异常排查(38)
  • 记录 Qt 跨线程 信号无法触发槽函数问题
  • wireshark 01——安装
  • 网上最好购物网站邯郸网上销售公司
  • 使用top域名做网站seo职位是什么意思
  • CUDIS 健康协议在 Sui 上打造更健康的未来
  • 装修网站排行榜前十名有哪些南昌网站建设哪家最好
  • Golang学习笔记:context的使用场景
  • 带有客户案例的网站广州专业网站建设报价
  • 昆明微信网站建设软件开发模型有几种并简述其特点
  • 高效实现实体删除的宏解决方案:使用Rust宏优化删除操作
  • Rust泛型详解
  • 官方手表网站网站专题分类
  • 新乡网站建设方案搜狗网址大全下载安装
  • 关于可视化卷积核和特征图的深度理解
  • 【mysql】Mybatisplus BINARY {0} LIKE CONCAT(‘%‘, {1}, ‘%‘)写这句话是什么意思
  • 开发避坑指南(59):Vue3中高效删除数组元素的方法
  • wordpress建站要用模板吗wordpress搜索筛选
  • 安卓 WPS Office v18.21.0 国际版
  • 衡阳网站推广优化公司行业网站开发运营方案