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

【LeetCode】18、四数之和

题目:

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

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

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

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

提示:

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

解题思路:

先进行排序处理,再同三数之和那样固定两个数,使用双指针找出符合的数,再把结果存储下来,并返回。

代码解释:

result表示存储所有四元组的二维数组(每个数组是指向四元组的指针);

returnColumnSizes表示存储每个四元组的长度;

returnSize表示返回四元组的数量;

代码:

int cmp(const void* a, const void* b) {return *(int*)a-*(int*)b;
}
int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** returnColumnSizes) {*returnSize=0;if(numsSize<4) return NULL;qsort(nums,numsSize,sizeof(int),cmp);int** result=(int**)malloc(sizeof(int*)*numsSize*numsSize);*returnColumnSizes=(int*)malloc(sizeof(int)*numsSize*numsSize);for(int i=0;i<numsSize-3;i++) {if(i>0&&nums[i]==nums[i-1]) continue;for (int j=i+1;j<numsSize-2;j++) {if(j>i+1&&nums[j]==nums[j-1]) continue;int left=j+1;int right=numsSize-1;while(left<right) {long long sum=(long long)nums[i]+nums[j]+nums[left]+nums[right];if(sum==target) {result[*returnSize]=(int*)malloc(sizeof(int)*4);result[*returnSize][0]=nums[i];result[*returnSize][1]=nums[j];result[*returnSize][2]=nums[left];result[*returnSize][3]=nums[right];(*returnColumnSizes)[*returnSize]=4;(*returnSize)++;while(left<right&&nums[left]==nums[left+1]) left++;while(left<right&&nums[right]==nums[right - 1]) right--;left++;right--;} else if(sum<target) left++; else right--;}}}result=(int**)realloc(result,sizeof(int*)*(*returnSize));*returnColumnSizes=(int*)realloc(*returnColumnSizes,sizeof(int)*(*returnSize));return result;
}

http://www.dtcms.com/a/360512.html

相关文章:

  • LeeCode 37. 解数独
  • 并发编程——10 CyclicBarrier的源码分析
  • Selenium 等待机制:编写稳定可靠的自动化脚本
  • spi总线
  • 7.2elementplus的表单布局与模式
  • MCP SDK 学习二
  • 艾体宝案例 | 数据驱动破局:DOMO 如何重塑宠物零售门店的生存法则
  • Python 2025:AI代理、Rust与异步编程的新时代
  • 张柏芝亮相林家谦演唱会 再次演绎《任何天气》
  • Spring MVC 九大组件源码深度剖析(五):HandlerAdapter - 处理器的执行引擎
  • 三、环境搭建之Docker安装mysql
  • 一、计算机系统知识
  • Springcloud-----Nacos
  • 【influxdb】InfluxDB 2.x 线性写入详解
  • 层次分析法
  • Redis实现短信登录
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘SQLModel’问题
  • 37. 解数独
  • 解锁Tensor Core性能:深入探索CUDA Warp矩阵操作
  • Dify构建AI应用
  • FART 主动调用组件深度解析:破解 ART 下函数抽取壳的终极武器
  • #Datawhale 组队学习#8月-工作流自动化n8n入门-3
  • 第七章 使用角色和Asible内容集合简化Playbook
  • 4.4 光照(4) - 高光反射
  • 硬件工程师成长之路:从入门到精通的技术旅程
  • [Plecs基础知识系列]建立自定义模块/子系统(Subsystem)
  • C++ 面试高频考点 力扣 69. x 的平方根 二分查找 题解 每日一题
  • Linux网络socket套接字(中)
  • 切片语法[::-1]及其可用的类型
  • 基于单片机智能鞋柜/智能鞋橱/智能鞋盒