454. 四数相加II

给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。
为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过 2^31 - 1 。

class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {Map<Integer,Integer> map = new HashMap<>();int res = 0; for(int i = 0; i < nums1.length; i++){for(int j = 0; j < nums2.length; j++){int temp = nums1[i] + nums2[j];if(map.containsKey(temp)){map.put(temp,map.get(temp)+1);}else{map.put(temp,1);}}}for(int n = 0; n < nums3.length; n++){for(int m = 0 ; m < nums4.length; m++){int temp= nums3[n]+nums4[m];if(map.containsKey(-1*temp)){res = res + map.get(-1*temp);}} }return res;}
}

383. 救赎金

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。
(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)

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

15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> res = new ArrayList<>();Arrays.sort(nums);for(int i = 0; i < nums.length; i++){if(nums[i] > 0){return res;}if(i > 0 && nums[i] == nums[i-1]){continue;}int left = i + 1;int right = nums.length-1;while(left < right){int sum = nums[i] + nums[left] + nums[right];if(sum > 0){right--;}else if(sum < 0){left++;}else{res.add(Arrays.asList(nums[i],nums[left],nums[right]));while(right > left && nums[left] == nums[left+1]){left++;}while(right >left && nums[right] == nums[right-1]){right--;}right--;left++;}}}return res;}
}

18. 四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • a、b、c 和 d 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按任意顺序返回答案 。

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> res = new ArrayList<>();Arrays.sort(nums);for(int i = 0; i < nums.length; i++){if(nums[i] > 0 && nums[i] > target){return res;}if(i > 0 && nums[i] == nums[i-1]){continue;}for(int j = i+1; j < nums.length; j++){if(j > i+1 && nums[j] == nums[j-1]){continue;}int left = j+1;int right = nums.length - 1;while(left < right){long sum = (long)nums[i] + nums[j] + nums[left] + nums[right];if(sum < target){left++;}else if(sum >target){right--;}else{res.add(Arrays.asList(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 res;}
}

代码随想录Day7| 454、383、15、18相关推荐

  1. 代码随想录算法训练营第15天,102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

    102.二叉树的层序遍历.226.反转二叉树.101.对称二叉树 102.二叉树的层序遍历 二叉树的层次遍历,我们可以定义一个队列, 当访问到某一个节点时,我们将它存在的左右节点放入队列中,便可达到按 ...

  2. 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和

    代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体 ...

  3. 代码随想录算法训练营第六天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和。

    代码随想录算法训练营第六天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和. 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和 454.四数相加I ...

  4. 代码随想录算法训练营第⑦天 | 454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 9.30

    代码随想录算法训练营第⑦天 | 454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 9.30 454.四数相加II 可以先用2次for循环遍历前两个数组a,b 并存储到map ...

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

    454. 四数相加 II 题解及想法 通过两个for循环先遍历a和b,key放a和b两数之和,value 放a和b两数之和出现的次数,再通过两个for循环遍历c和d,如果0-(c+d) 在map中出现 ...

  6. 代码随想录算法训练营第七天| 454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和

    Leetcode 454.四数相加II 思路分析: 本题直观的想法是采取暴力法,四数相加就用四层for循环.虽然能得到结果,但时间复杂度为o(n4),当数组长度较大时,Leetcode便提示超时.该方 ...

  7. 代码随想录算法训练营day6| 454.四数相加II 383.赎金信 15.三数之和 18.四数之和

    代码随想录算法训练营day6| 454.四数相加II 383.赎金信 15.三数之和 18.四数之和 LeetCode 454 四数相加II 题目链接: 454.四数相加II class Soluti ...

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

    今日学习的文章和视频链接 454文章链接: link 454视频讲解链接: link 383文章链接: link 383视频暂无讲解 15文章链接: link 15视频讲解链接: link 18文章链 ...

  9. 代码随想录算法训练营第07天 | 454.四数相加II 、383. 赎金信、315. 三数之和 、18. 四数之和

    题目 题目链接,代码 题目链接,代码 题目链接,代码 题目链接,代码 初见思路 454.四数相加II 直接看了解析,想通的话还是比较好理解的.用一个map来记录两个数组的和以及出现次数, key为i+ ...

最新文章

  1. System.Timers.Timer的Enable、Start、Stop记录
  2. 006-spring cloud gateway-GatewayAutoConfiguration核心配置-GatewayProperties初始化加载、Route初始化加载...
  3. client-go删除job同时删除job关联的pod
  4. s120面板控制调速_SINAMICS S120变频调速装置
  5. Vue.js中data,props和computed数据
  6. Linux键盘连续输入,关于修改键盘输入
  7. amazeui学习笔记--css(基本样式4)--打印样式Print
  8. KVO.非常简单的键值监听模式
  9. EViews-蒙特卡洛模型代码
  10. STM32F0免费版keil下载激活方式
  11. 终端上网_TP-Link企业路由器IPv6上网配置指导
  12. python抓取谷歌app市场的icon
  13. Android组件化开发,组件间的Activity页面跳转。
  14. 《如何阅读一本书》笔记
  15. 使用 Python 计算 DID 及其对应P值
  16. 基于PHP排课系统设计与实现 开题报告
  17. FPGA — Overview
  18. 用Compose实现手写春联效果
  19. HTML5 之 定位总结
  20. Unity实时阴影实现图解

热门文章

  1. java mongo 去重_Mongodb去重查询
  2. 计算机组成原理学习通第七章课后作业
  3. 实现AI角色的自主移动-追逐Pursuit行为
  4. 市场回暖进行时,实体店商户们千万不要做这三件事!
  5. Python | 阿尔法基本语法元素练习题
  6. 【OneNote】官网下载安装后英文改中文
  7. 什么是DevOps?
  8. [ESXi]各种ID:WID/LWID/CID/GID
  9. 手机里面千万不要储存这几种照片!一旦泄露后果难以想象
  10. VS2010/MFC编程入门