代码随想录算法训练营第七天【哈希表】454.四数相加II、383.赎金信、15.三数之和、18.四数之和

454.四数相加II

力扣题目链接

心得:这道题目感觉和昨天的最后一题【1.两数之和】思路挺像的。

  1)先遍历2层for循环,求和,存入map

  2)通过四数和为0这一信息,用0-sum,得到目标值target

  3)去map中匹配,计算数量count

  4)hashmap中key值不存在就添加键值对,key存在则对应的value值加1。map.getOrDefault(sum,0)+1

复制代码
class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        Map<Integer,Integer> map = new HashMap<>();
        int count = 0;
        for(int i=0;i<nums1.length;i++){
            for(int j=0;j<nums2.length;j++){
                int sum = nums1[i]+nums2[j];
                map.put(sum,map.getOrDefault(sum,0)+1);
            }
        }
        for(int i=0;i<nums3.length;i++){
            for(int j=0;j<nums4.length;j++){
                int target = 0-nums3[i]-nums4[j];
                if(map.containsKey(target)){
                    count = count+map.get(target);
                }
            }
        }
        return count;
    }
}
复制代码

383.赎金信

力扣题目链接

心得:和昨天的【242.有效的字母异位词】是一个思路
复制代码
class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int[] arrays = new int[26];
        for(int i=0;i<magazine.length();i++){
            arrays[magazine.charAt(i) - 'a']++;
        }
        for(int i=0;i<ransomNote.length();i++){
            arrays[ransomNote.charAt(i) - 'a']--;
        }
        for(int array:arrays){
            if(array<0){
                return false;
            }
        }
        return true;
    }
}
复制代码

字符串的遍历还有一种写法,string.toCharArray(),直接转换为数组:

for(char c : magazine.toCharArray()){
  record[c
- 'a'] += 1; }

15.三数之和

力扣题目链接

心得:使用双指针,重点是一开始要对数组做排序,移动过程中考虑去重。代码二刷再补

  1)初始化二维动态数组,List<List<Integer>> result = new ArrayList<>()

  2)对数组进行排序,Arrays.sort(arr)

  3)直接进入下一次循环,continue

  4)二维数组添加数据,result.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]))

18.四数之和

力扣题目链接

心得:思路和上个题差不多,二刷再来补代码

posted @   橙子的房东  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示