代码随想录之哈希表(力扣题号)
创始人
2024-05-30 14:22:27
0

242. 有效的字母异位词

在这里插入图片描述
直接用数组模拟哈希表
只有小写字母,开26的数组就可以了

class Solution {public boolean isAnagram(String s, String t) {//24-28int[] hash = new int[26];Arrays.fill(hash,0);for(int i=0;ihash[s.charAt(i)-'a']++;}for(int i=0;ihash[t.charAt(i)-'a']--;}for(int i=0;iif(hash[i]!=0) return false;}return true;}
}

49. 字母异位词分组

在这里插入图片描述
思路也是用hashmap,但是java的操作没有很熟练,遇到很多问题,最后看了题解还是没能一次性写完,中间还看了两次,之后需要再练习几次

class Solution {public List> groupAnagrams(String[] strs) {//01-29Map> mp= new HashMap<>();      for(int i=0;ichar[] arr = strs[i].toCharArray();Arrays.sort(arr);String key = new String(arr);List list = mp.getOrDefault(key,new ArrayList());list.add(strs[i]);mp.put(key,list);}return new ArrayList>(mp.values());}
}

时间复杂度:
O(nklogk),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklogk)。

空间复杂度:O(nk),其中 n 是 strs中的字符串的数量,k 是 strs 中的字符串的的最大长度。需要用哈希表存储全部字符串。

15 三数之和

在这里插入图片描述
在这里插入图片描述

这题和之前牛客做过的一样,还是一样的思路:在两数之和的基础上遍历,然后用set去重,这题不要求输出结果也排序。但是这题的数据范围更大,按照之前的写法会超时,所以加了个排序,然后如果是重复的数字就跳过遍历。

class Solution {public List> threeSum(int[] nums) {//57-40Arrays.sort(nums);List> res= new ArrayList>();List> ress= new ArrayList>();for(int i=0;iint target = -nums[i];if(i>0&&nums[i]==nums[i-1]) continue;//跳过遍历,否则会超时Map mp = new HashMap<>();for(int j = i+1;jif(mp.containsKey(nums[j])){List row = new ArrayList<>();row.add(nums[i]);row.add(target-nums[j]);row.add(nums[j]);row.sort((a,b)->a-b);  res.add(row);}mp.put(target-nums[j],j);              }}Set> s = new HashSet>();for(int i=0;is.add(res.get(i));}for( List r:s){ress.add(r);}return ress;}
}

但是这样还是三重循环,时间复杂度还是N的三次方。
可以继续改进:当a+b+c=0的时候,第二层b’>b,要让条件满足的c‘一定

class Solution {public List> threeSum(int[] nums) {//57-40Arrays.sort(nums);List> res= new ArrayList>();List> ress= new ArrayList>();for(int i=0;iint target = -nums[i];if(i>0&&nums[i]==nums[i-1]) continue;Map mp = new HashMap<>();int left = i+1;int right = nums.length-1;while(leftif(nums[left]+nums[right]target) right--;else{while(left + 1 < right && nums[left] == nums[left + 1])//去重left++;while(right - 1 > left && nums[right] == nums[right - 1])//去重right--;List row = new ArrayList<>();row.add(nums[i]);row.add(nums[left]);row.add(nums[right]);res.add(row);left++;right--;}}                         }return res;}
}

18 四数之和

在这里插入图片描述
在这里插入图片描述
和三数之和的思路一样,就是多了一层循环,但是四数有一个坑点在于用int会溢出,要转换成long

class Solution {public List> fourSum(int[] nums, int target) {//47-04List> res = new ArrayList>();Arrays.sort(nums);for(int i=0;iif(i>0&&nums[i]==nums[i-1]) continue;for(int j = i+1;jif(j>i+1&&nums[j]==nums[j-1]) continue;int left = j+1;int right = nums.length-1;while(left//注意要转换成long,否则会溢出long sum = (long)nums[i]+(long)nums[j]+(long)nums[left]+(long)nums[right];if(sum>target) right--;else if(sumList tmp = new ArrayList();tmp.add(nums[i]);tmp.add(nums[j]);tmp.add(nums[left]);tmp.add(nums[right]);res.add(tmp);//可以用一句解决//res.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));while(left

相关内容

热门资讯

安装中央空调系统哪个好,安装中... 安装中央空调系统,哪种方案更合适?一、中央空调系统的分类中央空调系统主要分为以下几类: 冷媒系...
安卓 adb 安装系统应用,如... 深入解析:如何使用ADB命令安装安卓系统应用在Android开发与调试过程中,ADB(Android...
按键系统安装方法 一键安装,轻松掌握按键系统安装方法准备工作在开始安装按键系统之前,我们需要做好以下准备工作: 确保...
安装新风系统的吊顶设计,吊顶设... 吊顶设计在安装新风系统中的重要性随着人们对室内空气质量要求的提高,新风系统已经成为现代家居装修的重要...
安卓系统安装苹果字体,轻松实现... 安卓系统安装苹果字体:轻松实现苹果风格随着智能手机的普及,越来越多的用户开始追求个性化的手机使用体验...
北京火灾监测系统安装,保障城市... 北京火灾监测系统安装:保障城市安全的重要举措随着城市化进程的加快,火灾事故的预防和控制成为城市安全管...
保护软件系统安装,确保数据安全... 全面解析保护软件系统安装:确保数据安全与系统稳定随着信息技术的飞速发展,保护软件系统的重要性日益凸显...
安装系统专业词语,安装系统专业... 安装系统专业术语解析随着信息技术的飞速发展,系统安装和维护已成为许多行业的基础工作。为了帮助读者更好...
报表系统门窗安装流程 系统门窗安装流程详解 一、准备工作1. 设计图纸审核:首先,仔细审核设计图纸,确保门窗的尺寸、类型和...
宝塔服务器安装手机系统,宝塔服... 宝塔服务器安装手机系统全攻略随着云计算技术的不断发展,越来越多的企业和个人开始使用宝塔服务器进行网站...
安装智能停车系统的请示,关于安... 关于安装智能停车系统的请示报告尊敬的[上级领导/部门名称]:一、背景及必要性随着城市化进程的加快,城...
白银智慧停车系统安装,打造高效... 白银智慧停车系统安装:打造高效便捷的停车新体验随着白银市汽车保有量的持续增长,停车难问题日益凸显。为...
清理电脑安装系统,电脑系统安装... 电脑系统安装与清理全攻略随着电脑使用时间的增长,系统文件和临时文件会逐渐占用大量磁盘空间,影响电脑运...
暗藏式木质门禁系统安装,暗藏式... 暗藏式木质门禁系统安装指南随着智能家居和安防技术的不断发展,暗藏式木质门禁系统因其美观、隐蔽和安全性...
安装系统怎么填写,安装系统时填... 安装系统时填写信息的详细指南在安装操作系统时,填写相关信息是必不可少的步骤。这些信息不仅有助于系统识...
清华同方超翔系统安装,清华同方... 清华同方超翔系列电脑系统安装指南一、准备工作在进行系统安装之前,我们需要做好以下准备工作: 备份重...
北海制冷系统安装,北海制冷系统... 北海制冷系统安装——打造舒适凉爽的家居环境随着夏季的到来,气温逐渐升高,制冷系统的重要性愈发凸显。在...
安卓7.0.0系统安装,轻松升... 安卓7.0.0系统安装指南:轻松升级,体验新功能一、确认手机硬件支持在开始安装安卓7.0.0系统之前...
白城隔音系统门窗安装,白城隔音... 白城隔音系统门窗安装,打造宁静家居环境随着城市化进程的加快,噪音污染已经成为影响人们生活质量的重要因...
驱动安装系统步骤图解,驱动安装... 驱动安装系统步骤图解——轻松解决设备兼容性问题一、准备工作在开始安装驱动之前,我们需要做好以下准备工...