454.四数相加

2024-03-20 08:44
文章标签 相加 四数 454

本文主要是介绍454.四数相加,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给你四个整数数组 nums1nums2nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

  • 0 <= i, j, k, l < n
  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

方法一:

双层for循环,将nums1、nums2的所有元素和的可能求出来,用<key, value>表示<sum,sum出现的次数>

再次双层for时,nums3、nums4和与nums1、nums2相反时,取出这个<sum出现的次数>,将这些<sum出现的次数>求和到ans中,返回即可。

public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4){Map<Integer, Integer> map1 = new HashMap<>();int n = nums1.length;for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){int sum = nums1[i] + nums[j];if(map1.containsKey(sum)){ int value = map1.get(sum)map1.put(sum, ++value);} else {map1.put(sum, 1);}}}int ans = 0;for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){int sum = ( nums3[i] + nums4[j] ) * (-1);if(map1.containsKey(sum)) ans += map1.get(sum);}}return ans;
}

简化:

public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {// 计算nums1 nums2和有哪些种,并记录每种的次数Map<Integer, Integer> map1 = new HashMap<>();int n = nums1.length;for(int i : nums1){for(int j : nums2){int sum = i + j;// ket - sum   value --次数map1.put(sum, map1.getOrDefault(sum, 0) + 1 );// map1.getOrDefault(sum, 0) + 1 // 如果存在sum这个key就返回它的value,不存在就返回0// +1 代表,如果存在sum这个key就value++,不存在就加入一个,value设置为1// if(map1.containsKey(sum)){//     int value =  map1.get(sum);//     map1.put(sum, ++value);// } else {//     map1.put(sum, 1);// }}}int ans = 0;//Map<Integer, Integer> map2 = new HashMap<>();for(int i : nums3){for(int j : nums4){int sum = -i - j;if(map1.containsKey(sum)) ans += map1.get(sum);}}return ans;
}

这篇关于454.四数相加的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828905

相关文章

javaScript日期相加减例子

当前时间加上2天 var d = new Date(“2015-7-31”); d.setDate(d.getDate()+2); var addTwo=d.getFullYear()+”年”+(d.getMonth()+1)+”月”+d.getDate()+”日”; “控制台输出===============”+”当前日期加2天:”+addTwo; 使用这种方法,月份也会给你计算.

两个长数字相加

1.编程题目 题目:要实现两个百位长的数字直接相加 分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位) 2.编程实现 package com.sino.daily.code_2019_6_29;import org.apache.commons.lang3.StringUtils;/*** create by 2019-06-29 19:03** @autho

Leetcode面试经典150题-2.两数相加

解法都在代码里,不懂就留言或者私信 理论上提交这个就是最优解 字节考过不下20次,这个高居字节面试榜第9名 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) {

第十八题:四数之和

题目描述 给定一个包含 n 个整数的数组 nums 和一个目标值 target,找出 nums 中的四个整数,使得它们的和等于 target。你可以假设每个输入都只有一个解决方案,并且不能使用同一个元素多次。 实现思路 采用排序加双指针的方法来解决这个问题。首先对数组进行排序,然后遍历数组,对于每一个元素,设定一个新的目标值为原目标值减去这个元素的值,再利用三数之和的解法找到剩下的三个数。为

leetcode解题思路分析(五十三)454 - 461 题

四数相加 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。 将AB视为统一的元素,将和存在哈希表中,然后C和D双重循环,依次求解 class Solution {public:int fourSumCount(vector<int>& A, vector<int>& B,

链表(篇5)用链表实现多项式相加

使用链接实现两个多项式相加 例: 输入:第一数= 5x ^ 2 + 4x ^ 1 + 2x ^ 0第二数= 5x ^ 1 + 5x ^ 0输出:5x ^ 2 + 9x ^ 1 + 7x ^ 0输入:第一数= 5x ^ 3 + 4x ^ 2 + 2x ^ 0第二数= 5x ^ 1 + 5x ^ 0输出:5x ^ 3 + 4x ^ 2 + 5x ^ 1 + 7x ^ 0 代码

★ 算法OJ题 ★ 力扣18 - 四数之和

Ciallo~(∠・ω< )⌒☆ ~ 今天,爱丽速子将和大家一起做一道双指针算法题--四数之和~ 目录 一  题目 二  算法解析 三  编写算法  做此题前最好先看一下前两篇博客~: ★ 算法OJ题 ★ 力扣 LCR179 - 和为 s 的两个数字-CSDN博客 ★ 算法OJ题 ★ 力扣15 - 三数之和-CSDN博客 一  题目 18. 四数之和 - 力扣(Lee

算法------四数相加 II (java 版本)

题目: 给定四个包含整数的数组列表 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 。例如:输入:A = [

vector所有元素相加求和_利用accumulate函数

自己使用时的两行代码 #include<numeric> //使用accumulate函数要包含这个头文件vector<float> result = {1.2, 2.3, 3.4};float scoreSum = accumulate(result.begin(), result.end(), 0.0); 然后看一下http://www.cplusplus.com/reference/

数据结构与算法:哈希表(附有leetcode题242、349、1、454、438、15、18题解)

哈希表的数据结构 哈希表用到的数据结构一共有三种:数组、set、map 一般情况下,如果元素较少且连续,那么用数组。 如果元素很多,那么用set。 如果元素很离散,或者存在kv结构,那么用map(python中是dict) 哈希表使用场景 判断某一个元素是否在某集合中出现过,出现了几次 纯哈希表 leetcode242.有效的字母异位词(数组结构) 知识点:注意python中用ord(