2023-07-15 LeetCode每日一题(四数之和)

news/2024/11/16 22:34:17/

2023-7-15每日一题

一、题目编号

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
    你可以按 任意顺序 返回答案 。

提示:

  • 1 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

四、解题代码

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> res;int n = nums.size();if(n < 4){return res;}sort(nums.begin(), nums.end());for(int i = 0; i < n; ++i){while(i != 0 && i < n && nums[i] == nums[i-1]){++i;}for(int j = i + 1; j < n; ++j){while(j != i + 1 && j < n && nums[j] == nums[j - 1]){++j;}int left = j + 1;int right = n - 1;while(left < right){long long temp = (long long)nums[left] + nums[right] + nums[i] + nums[j];if(temp < target){++left;} else if(temp == target){res.push_back({nums[i], nums[j], nums[left], nums[right]});++left;--right;while(left <= right && nums[left] == nums[left - 1]){++left;}while(left <= right && nums[right] == nums[right + 1]){--right;}} else{--right;}}}}return res;}
};

五、解题思路

(1) 本道题目是三数之和的进阶版,与三数之和差别不大,如果对于三数之和还不了解的可以阅读该篇文章——2023-07-08 LeetCode每日一题(三数之和)

(2) 还是一样的思考方式,我们的题目要求的是寻找到四个数字,不重不漏的等于target。那么我们先对原始数组进行排序,这样更有利于我们进行不重不漏。

(3) 我们如果采用四层循环+哈希判断方式,时间复杂度很高,一定是无法通过题目的。所以我们要另择良木而栖。我们设置最外层循环遍历第一个数字,要使得结果中第一个数字不同,那么如果该数字与前面一个数字相同,那么该数字为该值的所有可能性都已经找出来了,没必要第一个数字还为同样的值,i++。

(4) 这个时候我们将问题转化成三数之和的问题了,只不过所要找的数字之和等于的不是target,等于的是target - nums[i]。因为在三数之和这篇文章中已经写的十分详细了,所以不多赘述。不过大致的思路与(3)中的思路相同,如何不重不漏,然后只剩下两个数字的时候通过双指针的手法减少时间复杂度即可。


http://www.ppmy.cn/news/892744.html

相关文章

7.14~7.15学习总结

Java的前置知识学习时间截至了&#xff0c;慌的一批~~。 看看自己学的&#xff0c;再看看要求学的&#xff0c;简直&#xff1a; 现在继续&#xff1a;IO流里面的Commons_IO的用法&#xff1a; public class Main {public static void main(String[]args) throws IOException…

[紧急求助] LM317可调式直流稳压源输出电压不稳

最近在做LM317可调式直流稳压源&#xff0c;multisim仿真输出电压稳定于12V&#xff0c;可是实际焊出来的电路为什么输出电压很不稳定呢&#xff1f;从0到9V跳变很快&#xff0c;示波器显示有干扰&#xff0c;由于刚刚学完模电&#xff0c;电路还不太懂&#xff0c;求助高人能够…

STM32的ADC采样电压有时值大有时值小的问题

问题描述&#xff1a; 在做项目时&#xff0c;曾遇到这样一种情况:交流电压、电流ADC采样计算&#xff0c;有时上电后&#xff0c;整体值均偏大。有时上电后整体值均偏小&#xff0c;从程序检查来看计算方法没有问题&#xff0c;随电压、电流变化&#xff0c;计算的值也完全成…

L298N使用时电源电压被拉低的解决方法

L298N使用时电源电压被拉低的解决方法 L298N使用的一般情况是ENA或ENB输入PWM对系统进行控制。但当负载为感性负载时&#xff0c;如果出现输入电源被拉低的情况&#xff0c;则要改变使用IN1输入PWM&#xff0c;IN2置0&#xff0c;ENA置1。这样才能在关断时&#xff0c;感性负载…

开关电源输出电压不稳该如何解决?

开关电源一般多用于小型的通信基站和没有人看守的机房&#xff0c;一般由脉冲宽度调制&#xff08;PWM&#xff09;控制IC和MOSFET构成&#xff0c;做为电源产品所以必须配备电池管理&#xff0c;充放电管理&#xff0c;电压保护等功能。做为IDC数据机房常用产品对于电压的控制…

电阻阻值不对导致电压不稳定

5V电压加压到SMC的D-C73和330欧的上&#xff0c;D-C73分压1.8V&#xff0c;得出D-C73的阻值。在连接电路中无论D-C73是否导通&#xff0c;测的CPU的输入电压都是固定住&#xff0c;但是代码中却能捕获到CPU的输入电压的变化&#xff0c;但是反应很慢。根据D-C73的阻值把电阻改为…

[APM32F407]ADC输入阻抗电压对采样精度的影响

背景APM32F407的一个应用项目&#xff0c;发现ADC端口输入方波时&#xff0c;基准电压会随着输入方波信号跳变而上下跳变。如下图&#xff0c;黄色波形是监测到的基准电压Vref&#xff0c;绿色波形是ADC端口输入的方波信号&#xff0c;方波信号在0~4.5V跳变。2.5V的基准电压&am…

运放的失调电流与失调电压

前言 理想的运放&#xff0c;输入阻抗无穷大&#xff0c;输入电流为0&#xff0c;两个输入为0时&#xff0c;输出也是0&#xff0c;但实际上&#xff0c;all is wrong&#xff0c;应用中也需要考虑运放的这些不理想的参数&#xff0c;以免得到错误的结果。 运放内部电路 基本…