代码随想录算法训练营DAY7第三章 哈希表part02

目录

[454. 四数相加 II](#454. 四数相加 II)

[383. 赎金信](#383. 赎金信)

[15. 三数之和](#15. 三数之和)

[18. 四数之和](#18. 四数之和)


454. 四数相加 II

cpp 复制代码
class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        int ans=0;
        unordered_map<int,int> map;
        int n=nums1.size();
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                map[nums1[i]+nums2[j]]++;
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                int t=-(nums3[i]+nums4[j]);
                ans+=map[t];
            }
        }
        return ans;
    }
};

383. 赎金信

cpp 复制代码
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        unordered_map<char,int> map;
        for(char t:magazine){
            map[t]++;
        }
        for(char t:ransomNote){
            if(map[t]){
                map[t]--;
            }
            else {
                return false;
            }
        }
        return true;
    }
};

15. 三数之和

cpp 复制代码
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> ans;
        sort(nums.begin(), nums.end());
        for (int i = 0; i < nums.size() - 2; i++) {
            if(nums[i]>0)continue;
            if(i>0&&nums[i]==nums[i-1])continue;
            int t = -nums[i];
            int j = i + 1;
            int k = nums.size() - 1;
            while ( j < k) {
                int sum = nums[j] + nums[k];
                if (sum < t) {
                    j++;
                } else if (sum > t) {
                    k--;
                } else {
                    ans.push_back({nums[i], nums[j], nums[k]});
                    while(j<k&&nums[j]==nums[j+1]){
                        j++;
                    }
                    while(j<k&&nums[k]==nums[k-1]){
                        k--;
                    }
                    j++;
                    k--;
                }
            }
        }
        return ans;
    }
};

18. 四数之和

cpp 复制代码
class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
        vector<vector<int>> ans;
        int n=nums.size();
        for(int i=0;i<n;i++){
            if(i>0&&nums[i]==nums[i-1])continue;
            for(int j=i+1;j<n;j++){
                if(j>i+1&&nums[j]==nums[j-1])continue;
                long long t=(long long)target-(long long)nums[i]-(long long)nums[j];
                int left=j+1;
                int right=n-1;
                while(left<right){
                    long long sum=nums[left]+nums[right];
                    if(sum<t){
                        left++;
                    }
                    else if(sum>t){
                        right--;
                    }
                    else {
                        ans.push_back({nums[i],nums[j],nums[left],nums[right]});
                        while(left<right&&nums[left]==nums[left+1])left++;
                        while(left<right&&nums[right]==nums[right-1])right--;
                        left++;
                        right--;
                    }
                }
            }
        }
        return ans;
    }
};
相关推荐
Hcoco_me3 分钟前
大模型面试题49:从白话到进阶详解SFT 微调的 Loss 计算
人工智能·深度学习·神经网络·算法·机器学习·transformer·word2vec
星火开发设计4 分钟前
链表详解及C++实现
数据结构·c++·学习·链表·指针·知识
修炼地5 分钟前
代码随想录算法训练营第五十三天 | 卡码网97. 小明逛公园(Floyd 算法)、卡码网127. 骑士的攻击(A * 算法)、最短路算法总结、图论总结
c++·算法·图论
小王和八蛋5 分钟前
负载均衡之DNS轮询
后端·算法·程序员
CCPC不拿奖不改名11 分钟前
python基础:python语言的数据结构+面试习题
开发语言·数据结构·python·面试
炽烈小老头11 分钟前
【每天学习一点算法 2026/01/07】Fizz Buzz
学习·算法
数据大魔方18 分钟前
【期货量化实战】威廉指标(WR)策略:精准捕捉超买超卖信号(Python源码)
开发语言·数据库·python·算法·github·程序员创富
why技术18 分钟前
可怕,看到一个冷血的算法。人心逐利,算法只会更聪明地逐利。
前端·后端·算法
CCPC不拿奖不改名27 分钟前
Python基础:python语言中的文件操作+面试题目
开发语言·数据结构·人工智能·python·学习·面试·职场和发展
有一个好名字29 分钟前
力扣-最大连续1的个数III
c++·算法·leetcode