Leecode刷题 Day7----------哈希表
创始人
2024-02-21 04:20:33

Leecode刷题 Day7----------哈希表

1. 四数相加II(454)

  • 题目链接:https://leetcode.cn/problems/4sum-ii/
  • 文章讲解/视频讲解:https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html

重点:

  • 不用去重,两组0000,0000分别来自四个数组,但是每个0来自一个数组的不同位置。这样算两组,无需去重。
  • 重点在于Map的key是分别第一个数组和分别第二个数组的和,value是这个和出现的次数! 类似于两数之和!
  • count+=map.get(0-temp); 意味着这么多组不去重!
class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {Map map=new HashMap<>();int count=0;for(int i:nums1){for(int j:nums2){int temp=i+j;if(map.containsKey(temp)) map.put(temp,map.get(temp)+1);else map.put(temp,1);}}for(int i:nums3){for(int j:nums4){int temp=i+j;if(map.containsKey(0-temp)) count+=map.get(0-temp);}}return count;}
}

2. 赎金信 (383)

  • 题目链接:https://leetcode.cn/problems/ransom-note/
  • 文章讲解:https://programmercarl.com/0383.%E8%B5%8E%E9%87%91%E4%BF%A1.html

重点:与字母异位很类似!!!!只要有<0,就是false

class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] ints=new int[26];for(int i=0;iints[magazine.charAt(i)-'a']++;}for(int i=0;iints[ransomNote.charAt(i)-'a']--;}for(int i=0;iif(ints[i]<0) return false;}return true;}
}

3. 三数之和 (15)

  • 题目链接:https://leetcode.cn/problems/3sum/
  • 文章讲解/视频讲解:https://programmercarl.com/0015.%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C.html

重点

  1. 题意表明要去重!!!000可以的,如果有两组000是不行的(因为原数组里可能有重复的0,四个0等)
  2. 三个数字的去重方式不同:
    2.1 第一个数字是在开始的时候就去重,如果这个和左边已经加过的数字相同时跳过-------if(i>0&&nums[i]==nums[i-1]) continue;
    2.2 第二个数字left是如果下一个和这个相同时就直接给指针+±-------while(right > left&&nums[left]==nums[left+1]) left++;
    2.3 第三个数字right是如果下一个和这个相同时就直接给指针–,---------------- while(right > left&&nums[right]==nums[right-1]) right–;
  3. left = i+1
  4. 判断sum 与0的关系从而控制 left 和 right 指针的移动方向
  5. 注意数组不要越界,只要看到数组索引+1或-1就要敏感-----判断:i的大小&&条件
  6. 库函数:list.add(Arrays.asList(nums[i], nums[left], nums[right]));
class Solution {public List> threeSum(int[] nums) {List> list=new ArrayList<>();Arrays.sort(nums);for(int i=0;iif(nums[i]>0) return list;if(i>0&&nums[i]==nums[i-1]) continue;int left=i+1;int right=nums.length-1;while(leftint sum=nums[i]+nums[left]+nums[right];if(sum>0) right--;else if(sum<0) left++;else{list.add(Arrays.asList(nums[i], nums[left], nums[right]));while(left+11 & &nums[right]==nums[right-1]) right--;left++;right--;}    }}return list;}
}

4. 四数之和 (18)

  • 题目链接:https://leetcode.cn/problems/4sum/
  • 文章讲解/视频讲解:https://programmercarl.com/0018.%E5%9B%9B%E6%95%B0%E4%B9%8B%E5%92%8C.html

与上题的不同点:

  1. 加一层for循环,j=i+1
  2. j 的判断条件:是否>i+1 && 条件
  3. 不知道target与0的关系,如果该数>target并且该数为正数,这是不存在的
    if(nums[i]>0 && nums[i]>target) return list;
class Solution {public List> fourSum(int[] nums, int target) {List> list=new ArrayList<>();Arrays.sort(nums);for(int i=0;i//如果该数>target并且该数为正数,这是不存在的if(nums[i]>0 && nums[i]>target) return list;if(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(leftint sum=nums[i]+nums[j]+nums[left]+nums[right];if(sum>target) right--;else if(sumlist.add(Arrays.asList(nums[i], nums[j],nums[left], nums[right]));while(left+11&&nums[right]==nums[right-1]) right--;left++;right--;}    }}}return list;}
}

5. 总结

454. 四数相加 与 18. 四数之和,15. 三数之和 的区别:

454 为四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑重复问题
18. 四数之和 ,15.三数之和 是一个数组(集合)里找到和为0的组合,难很多!

相关内容

热门资讯

【看表情包学Linux】进程地...   🤣 爆笑教程 👉 《看表情包学Linux》👈 猛...
吉字五行及吉凶 吉字五行中代表... 五行解析在文化中,五行是非常重要的概念之一,在这里解析一下五行对于人们生活的影响。首先,金属代表的是...
月老姻缘灵签内容详解大全 月老... 月老灵签 姻缘签44签 求解签君尔目下之人。本是可心满意足之人。焉知后来之人。一个比一个更美好。就此...
六爻排盘蛇 六爻排盘预测绝招 ... 六爻排盘结果怎么看纳甲六爻在线排盘姓名:出生年:1981性别:男占事:起卦方式:手动摇卦公历时间:2...
吉凶由情绪决定 每日吉凶 每月... 情绪的力量情绪是我们生活中一个重要的组成部分。我们每天都会通过不同的方式感受到情绪的存在,而情绪的质...
吉凶悔吝的解释是什么 风水形势... 吉凶悔吝的解释是什么从古至今,人们对于吉凶悔吝都有着不同的看法。所谓吉,是指好的运气,让人们沾沾自喜...
如何看每日生肖运势 每日生肖运... 背景说明每个人都希望自己的运势越来越好,而对于人来说,生肖运势是一个参考价值很高的判断标准。按照传统...
最准观音灵签21签解签 观音灵... 观音灵签21签解签-遵医嘱,健康长寿观音精神签证是中国民间宗教信仰的重要形式,也是一种广泛流传的祈祷...
梦见红裤子被水冲走 梦见河里洗... 梦见红裤子被水冲走红裤子是一种比较鲜艳的颜色,在梦中出现可能代表着某种情绪或状态。而被水冲走则更加具...
十二星座对象配对 12星座最佳... 12星座配偶标准白羊座:温柔善良的人乐观单纯的白羊座在恋爱时喜欢另一半无条件的宠爱自己,另一半对自己...
带水又带土的名字女孩名字有哪些... 含水和土的字有哪些含水的字:淦、澜、浸、泼、滴、没、汪、沸、鸿、沔、浩、渣、溢、潺江、注、漭、淬、澧...
六爻失物卦 在线占卜失物 六爻... 六爻占卜 寻找失物公历起卦时间:2012年12月24日9时44分(按公历时间起卦)农历:仁辰年十一月...
天网今日生肖运势 每日特吉生肖... 天网今日生肖运势天网今日,十二生肖依旧是重要的关键词之一。根据传统文化和民间信仰,每个人都属于一个生...
六爻代表书籍 六爻预测好的书籍... 学六爻的书籍那些比较经典,最好适合初学者的。从古至今六爻类的书流传于世的非常少,六爻类最经典的几本书...
十二星座女生专属花卉 小葩画1... 狮子座的女生喜欢什么样的花1.狮子座的女生喜欢鲜艳、华丽、高贵的花。2.狮子座的女生通常有着自信、热...
客厅风水禁忌及化解 客厅推拉门... 客厅风水禁忌及解决方案客厅是家庭中最重要的空间之一,也是最容易受到风水影响的空间之一。在客厅里,我们...
吉凶参半牛兔在含义 牛兔相冲到... 吉凶参半牛兔在啥意思吉凶参半牛兔在是指属牛的和属兔的结婚以后生活吉凶各一半。丑牛与子鼠六合,因此最宜...
各生肖属相的车牌号码吉凶对照表... 十二生肖与车牌号的佳搭配 十二生肖车牌号吉凶对照表通常每个人的黄道十二宫都会影响车牌号码的运行模式,...
客厅西部尖角的风水 客厅有棱角... 客厅西南角最好的风水是什么?客厅西南角最好的风水是什么?客厅西南角最好的风水是什么?房子的方形风水是...
带昶字的女孩名字 带滢的女孩名... 长字命名的寓意及意义长字命名的寓意和意义是正直、坚强、努力、阳光、前途似景、忠诚。长是一个通用词。长...
六壬怎么算命 六壬掐指神算金口... 什么是六仁?刘仁是中国古代的算命方法,起源于汉代,是中国道教学派的经典之一。刘仁包括六个神:天乙、天...
四月二十九生肖运势 十二生肖鸡... 女1993农历四月二十九早上十点生辰八字是什么如何出生时间:公历 1993年 6月 18日 10点本...
带心字的游戏女孩名字大全集 游... 2020男孩怎么起名有内涵 带心字的男孩名字大全心繁体:心起名五行:金姓名学笔画:4画简体笔画:4画...
八字鬼谷子算命 鬼谷子精髓50... 什么是八字鬼谷子算命?八字鬼谷子算命,又称李静算命,是中国传统的民间算命方式。八字鬼谷子算命起源于六...
十二星座下个月的运势女生 十二... 白羊座下个月的运势女生白羊座女生本身就充满了无限活力和热情,下个月的运势也不会让你失望。职业上可能会...
号令天下手机吉凶预测 号令天下... 手机号怎么算吉凶?用最后四个手机号码除以80,然后减去整数部分(只留小数),再乘以80,就会得到一个...
命理十二生肖今年运势 明天运势... 命理十二生肖今年运势今年每年都有不同的转瞬即逝的岁月。对于不同的黄道十二宫来说,它每年都有自己独特的...
八字长生好吗 八字中帝旺到长生... 八字日坐长生一定富吗丁火曰元生于未月,余气通根,年支丙火也能助身,但于上两透旺食,生财耗身过甚,故命...
带日的名字女孩名字大全 起名带... 日字旁边的女孩名字大全日字旁边的女孩名字推荐1、诗晗、慧曦、Xi、仲晴2、小芸、小娟、会晴、若昕、敏...
号令天下固话号码测吉凶 查电话... 周易81测手机号码吉凶,号令天下手机号码测吉凶提起周易81测手机号码吉凶,大家都知道,有人问天下手机...