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

代码随想录算法训练营第7天| 2454.四数相加II 、 383. 赎金信 、 15. 三数之和

四数相加

两两一组,第一组求和储存所有的家和,第二组算离目标数字的差值,再反过来寻找有没有这个值

点击查看代码
class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int res = 0;Map<Integer,Integer> map = new HashMap<Integer,Integer>();for(int i:nums1){for(int j:nums2){int sum = i+j;map.put(sum,map.getOrDefault(sum,0)+1);}}for(int i:nums3){for(int j:nums4){res += map.getOrDefault(0 - i - j,0);}}return res;}
}

383. 赎金信

点击查看代码
class Solution {public boolean canConstruct(String ransomNote, String magazine) {if(ransomNote.length()>magazine.length()){return false;}int[] record = new int[26];for(char c:magazine.toCharArray()){record[c-'a'] += 1;}for(char c:ransomNote.toCharArray()){record[c-'a'] -= 1;}for(int i:record){if(i<0){return false;}}return true;}
}

15. 三数之和

这个题要用双指针法,不能用哈希表,过程复杂且有多重去重操作。

点击查看代码
class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result = new ArrayList<>();Arrays.sort(nums);// 找出a + b + c = 0// a = nums[i], b = nums[left], c = nums[right]for (int i = 0; i < nums.length; i++) {// 排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了if (nums[i] > 0) { return result;}if (i > 0 && nums[i] == nums[i - 1]) {  // 去重acontinue;}int left = i + 1;int right = nums.length - 1;while (right > left) {int sum = nums[i] + nums[left] + nums[right];if (sum > 0) {right--;} else if (sum < 0) {left++;} else {result.add(Arrays.asList(nums[i], nums[left], nums[right]));// 去重逻辑应该放在找到一个三元组之后,对b 和 c去重while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;right--; left++;}}}return result;}
}
http://www.jsqmd.com/news/460125/

相关文章:

  • Verilog数码管动态扫描实战:从分频器到完整电路设计(附Modelsim仿真)
  • CentOS 7.9下GLPI 10.0.16与OCS Inventory 2.12.2的完美联姻:企业IT资产管理实战
  • Shiro权限控制避坑指南:从登录验证到细粒度权限管理的正确姿势
  • Windows下CUDA 12.6与unsloth不兼容?手把手教你降级到12.4解决ptxas报错
  • 避坑指南:STC15单片机中断处理中using关键字的正确用法(含Keil内存分析)
  • 信息学奥赛实战解析:矩阵乘法的核心算法与OpenJudge解题技巧
  • SystemVerilog中forever循环的3种优雅终止方式(附Testbench实战代码)
  • 从js.map泄露到源码反编译:Webpack安全配置实战解析
  • STM32F103低功耗模式实战:如何用HAL库让电池续航翻倍(附完整代码)
  • 基于知识蒸馏的轻量级通用推理模型设计
  • 别再手动调样式了!用Figma动作面板实现一键跳转与组件联动
  • Android开发避坑指南:Toast与UI更新冲突导致的InputDispatcher崩溃解决方案
  • 国产半导体设备展览会推荐 彰显中国“芯”设备硬核实力 - 品牌2026
  • 电子工程师必看:三极管NPN与PNP的5个实战应用场景对比
  • 【HomeAssistant智能家居系统远程控制】利用Docker与内网穿透技术实现跨地域智能家居管理
  • 避坑指南:在arm64架构下编译Intel 82599ES万兆网卡驱动的常见问题与解决方案
  • 从宏块树到CU Tree:x265码控进化史中的时域优化技巧全揭秘
  • CC2530定时器中断全解析:如何避免模模式下的常见陷阱(附调试技巧)
  • 用PyTorch实战卷积层:从参数设置到输出尺寸计算(附代码示例)
  • 深入解析GPIO的8种工作模式及其应用场景
  • GKCTF 2021 CheckBot:利用CSRF漏洞绕过本地访问限制获取Flag
  • ML-Agents实战:四足机器人Crawler的关节控制与奖励机制解析
  • Python+Matplotlib仿真FOC控制:从三相交流电到Park变换的完整可视化教程
  • PyMOL绘图实战:5分钟搞定蛋白-配体相互作用可视化(附完整命令集)
  • 华为交换机登录安全全攻略:从默认密码修改到SSH/Telnet防护配置
  • Jeecg-Boot首页性能优化实战:从Nginx压缩到Webpack打包的全面提速
  • OPTICS算法解析:如何通过可达距离实现多密度聚类
  • 多语言互译法降AI靠谱吗?实操教程教你正确用法和注意事项
  • 避开数据同步的坑:canal监听MySQL binlog的5个最佳实践
  • AssetStudio进阶技巧:如何从Unity打包文件中精准提取UI素材与Shader代码