LeetCode 923.多重三数之和

给定一个整数数组 arr ,以及一个整数 target 作为目标值,返回满足 i < j < k 且 arr[i] + arr[j] + arr[k] == target 的元组 i, j, k 的数量。

由于结果会非常大,请返回 109 + 7 的模。

示例 1:

输入:arr = [1,1,2,2,3,3,4,4,5,5], target = 8
输出:20
解释:
按值枚举(arr[i], arr[j], arr[k]):
(1, 2, 5) 出现 8 次;
(1, 3, 4) 出现 8 次;
(2, 2, 4) 出现 2 次;
(2, 3, 3) 出现 2 次。
示例 2:

输入:arr = [1,1,2,2,2,2], target = 5
输出:12
解释:
arr[i] = 1, arr[j] = arr[k] = 2 出现 12 次:
我们从 [1,1] 中选择一个 1,有 2 种情况,
从 [2,2,2,2] 中选出两个 2,有 6 种情况。

提示:

3 <= arr.length <= 3000
0 <= arr[i] <= 100
0 <= target <= 300

先对arr进行排序,然后固定一个数字,进行相向双指针计算即可:

class Solution {
public:int threeSumMulti(vector<int>& arr, int target) {long long ans = 0;sort(arr.begin(), arr.end());// 每次固定一个数字for (int i = 0; i < arr.size() - 2; ++i) {int left = i + 1;int right = arr.size() - 1;if (arr[i] + arr[i + 1] + arr[i + 2] > target) {break;}if (arr[i] + arr[right] + arr[right - 1] < target) {continue;}while (left < right) {if (arr[i] + arr[left] + arr[right] > target) {--right;} else if (arr[i] + arr[left] + arr[right] < target) {++left;} else {// 如果left和right指向的数字的值相同// 说明[left, right]中任意两数字加arr[i]的和都为targetif (arr[left] == arr[right]) {ans += (right - left + 1) * (right - left) / 2;break;}// 计算左指针指向的数字有多少个连续相同的int leftSame = 1;++left;while (arr[left] == arr[left - 1]) {++leftSame;++left;}// 计算右指针指向的数字有多少个相同的int rightSame = 1;--right;while (arr[right] == arr[right + 1]) {++rightSame;--right;}ans += leftSame * rightSame;}}}return ans % (int)(1e9 + 7);}
};

如果arr的长度为n,则此算法时间复杂度为O(n2^22),空间复杂度为O(logn)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91109.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net日志系统Logging-五

日志概念 日志级别 NET (Microsoft.Extensions.Logging) 中定义的 6 个标准日志级别&#xff0c;按严重性从低到高排列&#xff1a; 日志级别数值描述典型使用场景Trace0最详细的信息&#xff0c;包含敏感数据&#xff08;如请求体、密码哈希等&#xff09;。仅在开发或深度故…

中国贸促会融媒体中心出海活动负责人、出海星球创始人莅临绿算技术

近日&#xff0c;中国贸促会融媒体中心出海活动负责人、出海星球创始人王思诺一行莅临广东省绿算技术有限公司&#xff0c;深入考察其核心技术产品与全球化布局。双方围绕绿算技术全栈产品体系、创新出海模式及生态共建展开深度对话。绿算技术作为国内智算基础设施领域的领军企…

【算法专题训练】06、数组双指针

1、数组 数组是由相同类型的元素组成的数据集合&#xff0c;并且占据一块连续的内存&#xff0c;按照顺序存储数据。 1.1、数组的特性&#xff1a; 数组元素通过下标获取数据数组对象初始化时&#xff0c;需要先指定数组容量大小&#xff0c;并根据容量大小分配内存。缺点&…

操作系统-lecture2(操作系统结构)

回顾下lecture1 swap区域不可以马上执行&#xff0c;即虚拟内存的数据和指令不可以被执行&#xff0c;得交换回到内存区域 操作系统的服务 主要提供两种服务 面向普通用户&#xff1a;user interface面向程序员&#xff1a;应用级程序代码 为用户 为用户提供了操作包括但不…

内网服务器实现从公网穿透

从6月份tplink的ddns失效之后&#xff0c;对于部分在内网运行的服务器&#xff0c;从公网访问就收到了部分影响。有好几个朋友找来&#xff0c;寻求帮助&#xff0c;看看怎么恢复原来的机制&#xff0c;可以从公网互联网访问内网服务器。方案一&#xff1a;如果有动态公网的客户…

vcs-编译+仿真+dump波形【IMP】

VCS仿真分为两步式(编译/compilation仿真/simulation)和三步式(分析/analysis细化/elaborationsimulation/仿真);注2:analysis/分析是三步式flow中仿真design的第一步&#xff0c;在此阶段将使用vhdlan或vlogan分析VHDL、Verilog、SystemVerilog和OpenVera文件。下面的部分包括…

程序代码篇---python向http界面发送数据

在 Python 中向 HTTP 界面发送数据&#xff0c;本质上是模拟用户在网页上填写表单、点击提交按钮的过程。这在自动化测试、数据上报、接口调用等场景中非常常用。下面用通俗易懂的方式介绍具体方法、实例代码和解析。核心原理网页上的数据发送&#xff08;比如提交表单&#xf…

mybatis-plus由mysql改成达梦数据库

前置条件: 达梦数据库设置了大小写敏感,我比较菜,改不动!先这么凑合着用吧; 因为设置了大小写敏感,所以所有的sql语句都要加 引号; 这样是会报错的: SELECT remark,createDept,createBy,createTime,updateBy,updateTime FROM sys_oss_config这样才可以 SELECT "create_…

设计模式:外观模式 Facade

目录前言问题解决方案结构代码前言 外观是一种结构型设计模式&#xff0c;能为程序库、框架或其他复杂类提供一个简单的接口。 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。正常情况下&#xff0c; 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确…

【数据结构初阶】--二叉树(四)

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

三、平面度检测-差值法

方法一: dev_get_window (WindowHandle) *读取3通道彩色融合图 read_image (Image, ./XYZ彩色融合图.tiff) *拆分3个通道 decompose3 (Image, x, y, z) *将3个通道图像转换为3D模型 xyz_to_object_model_3d (x,y, z, ObjectModel3D) *显示动态3D模型 threshold (z, Regions,…

什么是数据编排?数据编排的流程、优势、挑战及工具有哪些?

目录 一、数据编排的定义与概念 1.数据编排的基本含义 2.数据编排与相关概念的区别 3.数据编排的重要性 二、数据编排的流程 1.需求分析&#xff1a; 2.数据源识别与连接&#xff1a; 3.数据抽取&#xff1a; 4.数据转换&#xff1a; 5.数据加载&#xff1a; 6.监控…

【C++算法】82.BFS解决FloodFill算法_被围绕的区域

文章目录题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;题目链接&#xff1a; 130. 被围绕的区域 题目描述&#xff1a; 解法 BFS一层层剥开。 C 算法代码&#xff1a; class Solution {// 定义四个方向的偏移量&#xff1a;右、左、下、上int dx[4] …

商汤发布具身智能平台,让机器人像人一样和现实世界交互

7月27日&#xff0c;在“大爱无疆模塑未来”WAIC 2025大模型论坛上&#xff0c;商汤科技重磅发布「悟能」具身智能平台。「悟能」具身智能平台以商汤具身世界模型为核心引擎&#xff0c;依托商汤大装置提供端侧和云侧算力支持&#xff0c;能够为机器人、智能设备提供强大的感知…

MCP工作原理

在谈MCP原理前&#xff0c;我们先谈谈MCP的技术前身—Function Calling。1.Function Calling技术在FunctionCalling技术出现之前&#xff0c;大语言模型虽然拥有强大的知识储备和语言理解能力&#xff0c;但是只能提供自身数据库已有的信息&#xff0c;无法和外界进行信息交互。…

VSCode手动版本更新

技术背景 使用VSCode的的过程中&#xff0c;如果打开了自动更新功能&#xff0c;每隔一段时间就会有更新提示。为了保持版本的稳定性&#xff0c;我们可以在设置中将Update: Mode设置为none&#xff0c;这样就不会触发自动更新。但有时又有版本更新的需求&#xff0c;可能是版本…

医疗超声成像专用AFE模拟前端

医疗超声成像作为一种广泛应用于临床诊断的重要技术&#xff0c;对于提供清晰、准确的医学图像起着关键作用。在超声成像系统中&#xff0c;AFE模拟前端扮演着至关重要的角色。它负责对超声换能器接收到的微弱电信号进行处理和转换&#xff0c;为后续的数字信号处理提供高质量的…

机器学习之线性回归——小白教学

一、线性回归简介1.什么是线性回归线性回归(Linear regression)是利⽤回归⽅程(函数)对⼀个或多个⾃变量(特征值)和因变量(⽬标值)之间关系进⾏建模的⼀种分析⽅式。特点&#xff1a;只有⼀个⾃变量的情况称为单变量回归&#xff0c;多于⼀个⾃变量情况的叫做多元回归线性回…

.NET 10 中的新增功能系列文章1——运行时中的新增功能

引言 随着 .NET 10 预览版6的发布&#xff0c;微软在运行时层面带来了一系列重要的性能改进和新功能。这些改进主要集中在JIT编译器优化、硬件指令集支持、内存管理等方面&#xff0c;旨在进一步提升应用程序的执行效率和资源利用率。本文将详细解析这些运行时增强功能&#x…

安宝特方案丨AI算法能力开放平台:适用于人工装配质检、点检、实操培训

当前工业AI图形识别算法的应用存在投入成本高、维护更新难、依赖固定相机、应用范围窄、与实际作业脱节等问题。 针对以上情况&#xff0c;安宝特提出了“AI算法能力开放平台”&#xff0c;目的是让AI图形识别算法可以与现场实际的人工点检作业、装配作业、质检作业、培训作业…