代码随想录之哈希表(力扣题号)
创始人
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

相关内容

热门资讯

lpddr4内存手机有哪些-L... 嘿,小伙伴们,今天咱们来聊聊那些装了LPDDR4内存的手机,真是让人激动到不行!想象一下,你的手机里...
jq25ts与jq26ts的区... 嘿,朋友们,今天咱们聊聊那些年让我们激动不已的jq25ts和jq26ts!这两款“机”啊,真是让人又...
有效身份证件大全图片-有效身份... 哎呀,说到有效身份证件,我这心里就五味杂陈的!那些年,我们为了办个什么事儿,翻箱倒柜找身份证,那叫一...
北京小产权 算有房户吗-北京小... 哎呀,说起这北京的小产权房,我这心里啊,真是五味杂陈。你说,我这辛辛苦苦攒钱买的小产权房,算不算有房...
surface桌面图标大小-S... 哎哟喂,今天一打开我的Surface,差点没被那些桌面上的图标吓一跳!怎么回事啊,这些图标一个个都像...
安卓7.1系统流畅度评测-小米... 大家好,我是你们的小米手机,今天我要来吹一波我的操作系统——安卓7.1!哎呀,这系统,真的是快得让我...
linux 安装tuxedo-... 大家好,我是你们的好朋友小黑,今天咱们聊聊怎么在Linux上安装Tuxedo。哎呀,别怕,不是让你去...
windows2024ghos... 哎呀,说到这个Windows2024Ghost下载,我这心里就激动得不行!你知道吗,这可不只是一次简...
bbrowserboostsy... 天啊,我简直要疯了!刚刚还好好的,突然屏幕一黑,接着就是那个可怕的蓝屏,上面还写着“bbrowser...
ps4会员取消自动续费-如何取... 哎呀,说到这个PS4会员自动续费,我真是有一肚子的话要说!你是不是也经常在账单上看到莫名其妙的扣费,...
360恢复手机误删的视频-手滑... 哎呀妈呀,你们能想象那种感觉吗?就是那种,一不小心手滑,把手机里的宝贝视频给删了,心里那个急啊,简直...
mapinfo全国地图-用 M... 嘿,朋友,你有没有想过,我们脚下的这片土地,其实藏着无数的故事和秘密?今天,我要带你用MapInfo...
用名字可以查询身份证号码-仅知... 哎呀,今天听到一个消息,说是现在只要知道一个人的名字,就能查到他的身份证号码!这简直是让人目瞪口呆啊...
10240:程序员的秘密语言与... 在这个数字充斥的世界里,10240不仅仅是一个普通的数字组合,它是程序员们的秘密语言,是他们在代码海...
windows的桌面是指-Wi... 大家好,我是你们的朋友小W,今天咱们聊聊那个天天见面却可能不太了解的老朋友——Windows的桌面。...
杭州绿云酒店软件-绿云酒店软件... 每个人都渴望在旅途中找到一丝宁静和舒适。而我,一个对住宿体验有着独特情感的旅行者,最近在杭州的一家酒...
新能源汽车电控供应商:保障电池... 哎呀,说到我们这些新能源汽车电控供应商,真是心情复杂得像坐过山车一样!每天早上醒来,第一个念头就是:...
miui8哪个版本最省电-MI... 哎呀,说到MIUI8哪个版本最省电,这可是个大问题啊!每次手机电量一掉我就慌得不行,简直就是电量焦虑...
国产pc based控制器-国... 嘿,朋友们!今天咱们聊聊那些让我们心跳加速的国产PCBased控制器!这可不是普通的玩具,它们可是工...
js实现选项卡切换代码-用 J... 大家好,我是你们的编程小伙伴!今天我要跟大家分享一个超级酷炫的小技巧——用JavaScript实现选...