当前位置: 首页 > news >正文

11.11 LeetCode 题目汇总与解题思路

题目一:454. 四数相加 II

解法:分组哈希法

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int, int> map;int ans = 0;// 计算 nums1 + nums2 的所有和for (int x : nums1) {for (int y : nums2) {map[x + y]++;}}// 查找 nums3 + nums4 的补数for (int x : nums3) {for (int y : nums4) {ans += map[-(x + y)];}}return ans;}
};

核心思路:将4个数组分成两组,降低时间复杂度从O(n⁴)到O(n²)

题目二:383. 赎金信

解法1:哈希表法(你的错误版本)

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {unordered_map<char, int> map;for (auto elem : ransomNote) {  // 错误:先统计需求map[elem]++;}for (auto elem : magazine) {    // 再减去供给map[elem]--;if (map[elem] < 0) return false;  // 逻辑错误}return true;}
};

解法2:哈希表法(正确版本)

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {unordered_map<char, int> map;// 先统计供给(magazine)for (auto elem : magazine) {map[elem]++;}// 再检查需求(ransomNote)for (auto elem : ransomNote) {map[elem]--;if (map[elem] < 0) return false;  // 供给不足}return true;}
};

解法3:数组计数法(最优)

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {if (ransomNote.size() > magazine.size()) return false;int count[26] = {0};// 统计供给for (char c : magazine) {count[c - 'a']++;}// 检查需求for (char c : ransomNote) {if (count[c - 'a'] <= 0) return false;count[c - 'a']--;}return true;}
};

题目三:15. 三数之和

解法:排序 + 双指针

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {ranges::sort(nums);  // 关键:先排序vector<vector<int>> ans;int n = nums.size();for (int i = 0; i < n - 2; i++) {int x = nums[i];// 去重if (i && x == nums[i - 1]) continue;// 剪枝优化if (x + nums[i + 1] + nums[i + 2] > 0) break;if (x + nums[n - 2] + nums[n - 1] < 0) continue;int j = i + 1, k = n - 1;  // 双指针while (j < k) {int s = x + nums[j] + nums[k];if (s > 0) k--;else if (s < 0) j++;else {ans.push_back({x, nums[j], nums[k]});// 去重for (k--; k > j && nums[k] == nums[k + 1]; k--);for (j++; j < k && nums[j] == nums[j - 1]; j++);}}}return ans;}
};

题目四:18. 四数之和

解法:排序 + 双指针(三数之和的扩展)

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {ranges::sort(nums);vector<vector<int>> ans;int n = nums.size();for (int a = 0; a < n - 3; a++) {long long x = nums[a];// 去重if (a && x == nums[a - 1]) continue;// 剪枝优化if (x + nums[a + 1] + nums[a + 2] + nums[a + 3] > target) break;if (x + nums[n - 3] + nums[n - 2] + nums[n - 1] < target) continue;for (int b = a + 1; b < n - 2; b++) {long long y = nums[b];// 去重if (b > a + 1 && y == nums[b - 1]) continue;// 剪枝优化if (x + y + nums[b + 1] + nums[b + 2] > target) break;if (x + y + nums[n - 2] + nums[n - 1] < target) continue;int c = b + 1, d = n - 1;  // 双指针while (c < d) {long long s = x + y + nums[c] + nums[d];if (s > target) d--;else if (s < target) c++;else {ans.push_back({(int)x, (int)y, nums[c], nums[d]});// 去重for (c++; c < d && nums[c] == nums[c - 1]; c++);for (d--; d > c && nums[d] == nums[d + 1]; d--);}}}}return ans;}
};

核心技巧总结

技巧适用场景代表题目时间复杂度
分组哈希多个数组组合问题四数相加IIO(n²)
数组计数字符统计、小范围数值赎金信O(n)
排序+双指针多数和问题、需要去重三数之和、四数之和O(n²)~O(n³)
剪枝优化有序数组的搜索问题三/四数之和大幅提升效率

关键区别

四数相加II vs 三/四数之和:

  • 四数相加II:四个独立数组,只求个数 → 分组哈希
  • 三/四数之和:单个数组,需要具体解且去重 → 排序+双指针

赎金信的关键:

  • 统计顺序:先统计供给(magazine),再检查需求(ransomNote)
  • 数据结构:优先使用数组而非哈希表(字符有限)

解题模板

多数和问题模板:

1. 排序数组
2. 外层循环固定第一个数(去重)
3. 剪枝优化
4. 内层使用双指针查找
5. 找到解后双指针去重

分组哈希模板:

1. 将问题分成两组
2. 计算第一组的所有可能(存入map)
3. 在第二组中查找补数
http://www.dtcms.com/a/598773.html

相关文章:

  • 实时网站制作集团网站 备案
  • 红色网站建设怎么给网站添加关键字
  • 马鞍山哪里做网站石家庄网页设计培训班
  • Bootstrap 4 Flex布局深入解析
  • 助力企业构建 AI 原生应用,函数计算FunctionAI 重塑模型服务与 Agent 全栈生态
  • 做金融的免费发帖的网站有哪些国际上比较认可的邮箱
  • 做盗版小说网站违法吗网上做彩票网站排名
  • 建设网站如何写文案中国舆情网
  • Landweber迭代算法用于一维、二维图像重建
  • wordpress如何做网站乡村规划建设网站
  • qq钓鱼网站制作跨境电商培训
  • 深圳市做网站的公司制作网页的步骤
  • 本地网站建设方案信息大全wordpress建英文博客
  • MVCC 可重复读原理与快照版本机制
  • 招聘网站页面设计图片施工员证报名入口官网
  • 湘潭网站建设工作室最专业的网站设计
  • 网站收录怎么删网站如可引导客户
  • Solidworks练习46-拉伸切、旋转、阵列
  • 取名网站排名百度竞价渠道户
  • 网站建设方案书内容管理制度wordpress设置撰写
  • 口服液灌装生产线中西门子1500plc通过CCLKIE转profinet模块与三菱MELSERVO-JE-C系列进行通讯解决案例
  • 网站建设策划案模板手机做网站的
  • 潍坊网站关键词推广国外黄冈网站推广软件
  • 淘宝建站服务手机网站app
  • 机器人焊接混合气优化使用秘诀
  • 成都网站seo外包河南移动商城网站建设
  • 网站100m空间个人电脑 网站 备案
  • Vue Router (匹配当前路由的链接和类名配置)
  • 上海要做网站wordpress 调用tag
  • 做网站谈单产品策划推广方案