yub‘s Algorithmic Adventures_Day9

server/2024/10/18 19:32:47/
两数之和

link:1. 两数之和 - 力扣(LeetCode)

思路分析

看到题目描述首先想到用两层for循环解决问题.
分别从i位置和j(i+1)位置开始相加遍历判断.
注意不越界条件

数组
java">class Solution {public int[] twoSum(int[] nums, int target) {//我们要找到2个数之和等于target//即我们需要找到nums[i] + nums[j] == target,并且返回他们的下标(i和j),其中i != jint[] ans = new int[2]; //声明一个大小为2的数组用来保存结果//我们通过循环来遍历所有的数字int n = nums.length;  //用一个变量n保存nums的长度//i为第一个数的下标,nums一共有n个数,所以i的取值范围是[0, n-1]for(int i = 0; i < n; i++){//j为第二个数的下标。for(int j = i + 1; j < n; j++){//对于每个数nums[i],我们验证一遍其他数(nums[j])跟它的和是否等于target//如果满足条件if(nums[i] + nums[j] == target){//将下标写入返回值数组里ans[0] = i;ans[1] = j;//返回return ans;}}}//默认返回值return new int[0];}
}
HashMap

Tips
当我们查询一个元素是否出现过或者一个元素是否在集合里时,首先要想到哈希法.

之前了解到哈希数组的运用是受到大小的限制,如果元素过少会浪费内存空间.
set是一个集合,存储的元素只能是一个key.本题不仅要判断y是否存在还要记录y的位置,不适用.

我们需要一个集合存储我们遍历的元素,对应的key值和value值分别存放元素和下标.(HasMap)

map的作用
java">class Solution {public int[] twoSum(int[] nums, int target) {//创建最终输出的数组int[] res = new int[2];//排除特殊情况if(nums == null || nums.length == 0) {return res;}//创建需要的MapMap<Integer,Integer> map = new HashMap<>();for(int i = 0;i < nums.length; i++) {int tmp = target - nums[i];if(map.containsKey(tmp)) {res[1] = i;res[0] = map.get(tmp);}//获取key对应的valuemap.put(nums[i],i);}  return res;}
}
java">hashmap.get(Object key)
//get方法获取指定key的value
hashmap.put(K key,V value)
//将键值对添加到HashMap中
四数之和

link:454. 四数相加 II - 力扣(LeetCode)

思路分析

首先看到四数加和,很容易想到两两分组遍历分别求和.利用map中key和value分别存储两个数组元素之和以及出现的次数(value)最后利用两两打足求和之后加法原则a+b(A)+ c+d(B)= 0,0 - B = A,如果A在map中出现过,就用定义的计数器count吧map中key对应的value统计出来最后返回count即可.【出现过几次就有几组】

HashMap
java">class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {//首先创建需要的MapMap<Integer, Integer> map = new HashMap<>();//创建sum和resint sum,res = 0;//求a、b(A)数组之和for(int i : nums1) {for(int j : nums2){sum = i + j;//如果tmp已经在map中存储过 value+1更新存储//put存储键值对 get获取value值if(map.containsKey(sum)) {map.put(sum,map.get(sum) + 1);}else {//第一次出现在map中value为1map.put(sum,1);}}}//求c、d(B)两数组之和并根据逻辑公式检查A数组中是否存在对应数值for(int i : nums3) {for(int j : nums4){sum = i + j;if(map.containsKey(0 - sum)) {res += map.get(0 - sum);}}}return res;}
}
补充getOrDefault()

getOrDefault() 方法获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值。

java">hashmap.getOrDefault(Object key, V defaultValue)
java">class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {Map<Integer,Integer> map = new HashMap<>();int res = 0;int sum = 0;for(int i:nums1){for(int j:nums2){sum = i+j;map.put(sum,map.getOrDefault(sum,0)+1);}}for(int i:nums3){for(int j :nums4){sum = i + j;res+=map.getOrDefault(0-sum,0);}}return res;}
}

http://www.ppmy.cn/server/132844.html

相关文章

华为OD机试真题-数组连续和-2024年OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,持续跟新 题目描述 给定一个含有N个正整数的数…

能源设施安全智能守护:AI监控卫士在油气与电力领域的应用

能源行业的安全与稳定运行对于社会的可持续发展至关重要&#xff0c;无论是石油、天然气还是电力设施&#xff0c;都面临着复杂的监测需求。思通数科推出的AI视频监控卫士&#xff0c;通过应用先进的人工智能技术&#xff0c;为能源行业的安全监测提供了高效、智能的解决方案。…

C++初阶学习第七弹——string的模拟实现

C初阶学习第六弹------标准库中的string类_c语言返回string-CSDN博客 通过上篇我们已经学习到了string类的基本使用&#xff0c;这里我们就试着模拟实现一些&#xff0c;我们主要实现一些常用到的函数。 目录 一、string类的构造 二、string类的拷贝构造 三、string类的析构函…

【专题】关系数据库标准语言SQL

1. SQL语言介绍 SQL(Structured Query Language)是结构化查询语言&#xff0c;它是一种在关系数据库中定义和操纵数据的标准语言&#xff0c;是用户与数据库之间进行交流的接口。 1.1 SQL数据库的体系结构 使用SQL关系数据库的特点&#xff1a; SQL用户可以是应用程序&#xf…

20201017-【C、C++】跳动的爱心

效果图片 代码 #include "graphics.h" #include <conio.h> #include <time.h> #include <math.h> #include <stdlib.h>struct Point {double x, y;COLORREF color; };COLORREF colors[256] {RGB(255,32,83),RGB(252,222,250),RGB(255,0,0)…

【React】父组件如何调用子组件的方法

在React中&#xff0c;父组件可以通过ref来调用子组件的方法。以下是一个简单的示例&#xff0c;展示了如何在父组件中使用ref来调用子组件的方法。 子组件 首先&#xff0c;在子组件中定义一个方法&#xff0c;并使用forwardRef将其暴露给父组件。 注意下面的代码块中&#x…

如何将照片从 iPhone 传输到USB无质量损坏

大家都喜欢用 iPhone 拍照&#xff0c;因为照片通常都很漂亮&#xff0c;这都要归功于 iPhone 令人惊叹的技术。但照片更新后会占用更多空间&#xff0c;并且您可能会开始收到没有存储空间的通知。因此&#xff0c;您可以将照片传输到 USB 驱动器&#xff0c;然后从 iPhone 中删…

美摄科技云服务解决方案,方案成熟,接入简单

美摄科技作为视频处理领域的先锋&#xff0c;凭借其强大的技术实力和深厚的行业经验&#xff0c;推出了成熟的云服务解决方案&#xff0c;为轻量化视频制作开辟了全新的道路。 一、成熟方案&#xff0c;接入无忧 美摄科技云服务解决方案的最大亮点在于其成熟度和易用性。我们…