leetcode 923. 3Sum With Multiplicity(含重复数字的3Sum)

【Python机器学习】主成分分析(PCA):高维数据的“瘦身术“ 主成分分析(PCA)的历史可以追溯到1901年,当时Karl Pearson首次提出了这个概念。在计算机还不存在的年代,PCA是一个纯粹的数学构想,用来简化多变量数据的分析。几十年后,当计算机出现时,PCA成为了数据分析中最早实现的算法之一。从那时起,超过一个世纪的发展中,PCA一直保持着其核心的理论框架和实用价值,这本身就是对这个方法深刻科学性的证明。在现代深度学习时代,许多人可能会认为PCA已经过时了。但事实恰好相反。 阅读详情

Given an integer array arr, and an integer target, return the number of tuples i, j, k such that i < j < k and arr[i] + arr[j] + arr[k] == target.

As the answer can be very large, return it modulo 109 + 7.

Example 1:

Input: arr = [1,1,2,2,3,3,4,4,5,5], target = 8
Output: 20
Explanation:
Enumerating by the values (arr[i], arr[j], arr[k]):
(1, 2, 5) occurs 8 times;
(1, 3, 4) occurs 8 times;
(2, 2, 4) occurs 2 times;
(2, 3, 3) occurs 2 times.

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

在数组arr中找到3个数,使它们的和==target,问有多少组这样的3个数。

思路:
1.HashMap
遍历arr,下标为i,我们要找到target - arr[i],也就是0~i-1范围剩下两个数的和出现了多少次,
然后统计 0~ i-1 下标对应所有数字与arr[ i ]的和出现的次数。这个就是到 i 为止所有两个数的和。
那么到 i+1 时,0~i 范围内所有两个数字和的次数都统计完了,再找target - arr[i+1]出现的次数,加到结果里面。
直到遍历结束。

注意用int型加着加着,在取mod前就会溢出,所以要用long型。

但是这个方法比较慢。

    public int threeSumMulti(int[] arr, int target) {
        int n = arr.length;
        HashMap<Integer, Long> map = new HashMap<>();
        long result = 0;
        int mod = 1000000007;
        
        for(int i = 0; i < n; i ++) {
            result += map.getOrDefault(target - arr[i], 0l);
            
            for(int j = 0; j < i; j++) {
                int sum = arr[i] + arr[j];
                map.put(sum, map.getOrDefault(sum, 0l) + 1l);
            }
        }
        return (int)(result % mod);
    }

2.利用0 <= arr[i] <= 100,
不管数组arr有多长,我就遍历0~100这些数字即可,反正3个元素跑不出这个范围。

但是为了避免出现重复的情况,比如[1, 2, 3]和[2,1,3]和[3,1,2]是同一组3个数字。这中间只取一种来计算,默认取升序排列的。
设3个数字为i, j, k, 取 i <= j <= k这种情况。

这时又分3种情况
1)i == j == k
比如[2, 2, 2], target = 6
2出现了3次,所以次数=3x2x1?然而其实只有一种,所以这种情况要➗6
2)i == j < k
[2, 2, 3], 次数=(2x1)x1?其实仍然是1种,这种情况要➗2
3)i < j < k
用i, j, k三个数字出现的次数相乘即可。

仍然要注意三个数字的次数相乘,在取mod之前就可能溢出,所以要取long型。

    public int threeSumMulti(int[] arr, int target) {        
        long[] cnt = new long[101];
        long result = 0;
        int mod = 1000000007;
        
        for(int tmp : arr) cnt[tmp] ++;
        
        for(int i = 0; i <= 100; i++) {
            for(int j = i; j <= 100; j++) {
                int k = target - i - j;
                if(k < 0 || k > 100) continue;
                if(cnt[i] == 0 || cnt[j] == 0 || cnt[k] == 0) continue;
                
                if(i == j && j == k) {
                    result += cnt[i] * (cnt[i]-1) * (cnt[i]-2) / 6 ;
                } else if(i == j && j != k) {
                    result += cnt[i] * (cnt[i]-1) / 2 * cnt[k];
                } else if(j < k) {
                    result += cnt[i] * cnt[j] * cnt[k];
                }
                result %= mod;
                
            }
        }
        return (int)result % mod;
    }
matlab之作图设置游标的精度 matlab画出的figure游标的精度往往是固定的,这就对我们的调试和查看数据造成了不便。 那么怎么修改游标的精度呢? 首先,获取游标dcm_obj = datacursormode(gcf);然后对游标的精度进行设置:set(dcm_obj,'UpdateFcn',@NewCallback)这个NewCallback是什么东西呢?这是一个可以返回游标精度的函数,具体内容如下:function 阅读详情

相关推荐

KV Cache 详解:新手也能理解的 LLM 推理加速技巧

(Autoregressive)生成的,即每次生成一个 token,然后将其作为输入继续生成下一个 token。:如果序列太长,超过了 KV Cache 的存储限制,就需要丢弃最早的 tokens(类似滑动窗口)。时,每次只会生成一个新 token,然后再把这个 token 作为输入继续生成下一个 token。,只缓存计算过的 K,VK, V,每次只计算新 token 的 K,VK, V,从而提升推理效率。:如果输入的 prompt 发生变化,之前的 KV Cache 不能复用,必须重新计算。

Harry的博客 7351

LeetCode之923. 3Sum With Multiplicity

题目链接:https://leetcode.com/problems/3sum-with-multiplicity/ 题目描述: Given an integer array A, and an integer target, return the number of tuples i, j, k such that i < j < k and A[i] + A[j] + A[k] == target. As the answer can be very large, return it mo

seeker的博客 268

软件工程大作业——图书管理系统/图书个性化推荐与实现系统

软件工程期末大作业,图书管理系统,包含ER图、程序流程图、属性图、结构图

2401_82857325的博客 3646

923. 3Sum With Multiplicity

解法 一题多解 解法一:DP 我自己的辣鸡解法,巨慢,但是居然没有超时23333 就是分别算用1、2、3个数得到和为x有多少种可能 优点可能只有短了吧 class Solution(object): def threeSumMulti(self, A, target): """ :type A: List[int] :type target:...

lemonmillie的博客 209

sap销售发货的流程_SAP销售订单发货后如何实现发票的自动创建?

问SAP销售订单发货后如何实现发票的自动创建?答业务场景有些快消零售企业,SAP系统单据量大,单据金额少,一般在销售发货后即可确认收入。此时无需人工在系统内操作VF01或者VF04进行开票操作,可将该操作设置成后台作业进行自动批量开票,具体操作如下:1、定义任务:VF06输入完以上信息,点击保存进入以下界面:说明:当前日期的意思是“开票的日期”等于“系统电脑中的当前日期”当前日期+/-...

weixin_42358409的博客 3358

vue使用 APlayer+Meting实现音乐播放,支持多平台音乐:网易云、腾讯、虾米、酷狗、百度

  我之前写过一篇博客:使用 APlayer 实现音乐播放器,虽然 APlayer 让我实现了想要的音乐播放器效果,但是音频列表 audio 的音频链接、音频封面、歌词等,是需要自己去补充的。   那么这些数据从哪里来呢?   我昨天有发愁一会儿会儿,也去搜了获取音乐列表的接口,可以发请求去获取数据嘛。   也有瞅见MetingJS,A powerful plugin connect APlayer and Meting,一个连接APlayer和Meting的功能强大的插件,附上GitHub地址:https

小R.的博客 4796

LeetCode.923 三数之和的多种可能 3Sum With Multiplicity

给定一个整数数组 A,以及一个整数 target 作为目标值,返回满足 i &amp;lt; j &amp;lt; k 且 A[i] + A[j] + A[k] == target 的元组 i, j, k 的数量。 由于结果会非常大,请返回 结果除以 10^9 + 7 的余数。 示例 1: 输入:A = [1,1,2,2,3,3,4,4,5,5], target = 8 输出:20 解释: 按值枚举(A[i],A...

bingshen的专栏 905

SimpleITK图像基础(一)——3D Resampling

文章目录前言基于SimpleITK进行实现 前言 进入深度学习网络之前需要进行统一数据集,这个时候需要对这些数据集进行重新采样,即假设各向同性体素并重新定向它们,以便可以读取所有图像的像素矩阵。 在将方位变换成一致时,可以用DICOMOrientImageFilter过滤器,可以将 DesiredCoordinateOrientation设置为你想要变换的方位,它将计算出所需的置换顺序并根据需要执行翻转以接近所需方向。 基于SimpleITK进行实现 workflow如下: step 1:首先运行DICOM

YYY_77的博客 2019

[LeetCode] 923. 3Sum With Multiplicity 三数之和的多种情况

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

azl397985856的专栏 246

ABAP RAP 行为建模深入学习:从 Behavior Definition 到 Behavior Implementation 的完整实践指南

ABAP RAP开发指南:业务行为定义与实现 本文介绍SAP RAP框架中业务对象行为的开发方法: 分层设计 Behavior Definition声明业务能力(增删改查、校验、动作等) Behavior Implementation在ABAP类中编写具体逻辑 核心组件 使用BDL定义业务行为 通过FOR BEHAVIOR OF绑定行为池类(ABP) 在本地类实现校验/确定/动作逻辑 关键特性 支持managed/unmanaged两种实现模式 提供草稿表、并发控制等企业级功能 通过EML以别名访问实体 开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 411

innovus:sroute 双层follow pin的做法

根据std cellpower pin的层次可以分成两种情况。

m0_61544122的博客 2722

LeetCode #923 - 3Sum With Multiplicity

题目描述: Given an integer array A, and an integer target, return the number of tuples i, j, k  such that i &lt; j &lt; k and A[i] + A[j] + A[k] == target. As the answer can be very large, return it mod...

LawFile的博客 217

VMware16虚拟机:下载和安装教程

VMware16 虚拟机 下载和安装教程

MQ0522的博客 20万+

923. 3Sum With Multiplicity [JavaScript]

一、题目 Given an integer array A, and an integer target, return the number of tuples i, j, k such that i &amp;lt; j &amp;lt; k and A[i] + A[j] + A[k] == target. As the answer can be very large, return it modulo...

descire 197

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

leetcode 923. 3Sum With Multiplicity 三数之和的多种可能

Problem:排序,哈希表记录每个数字的频次,双循环,拿到两个数字,最后一个数字相减得到,然后通过排列组合计算答案,需要考虑是否存在这样的情况,而且a, c不能重复的。

邹九的个人博客 111

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

题解:三数之和的多种可能(923)

题目链接:https://leetcode-cn.com/problems/3sum-with-multiplicity/ 给定一个整数数组 A,以及一个整数 target 作为目标值,返回满足 i &lt; j &lt; k 且 A[i] + A[j] + A[k] == target 的元组 i, j, k 的数量。 由于结果会非常大,请返回 结果除以 10^9 + 7 的余数。   ...

cswhit的博客 567

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LC.923. 3Sum With Multiplicity

class Solution1(object): def threeSumMulti(self, A, target): """ 暴力超时 """ count = 0 for i in range(len(A)): for j in range(i+1, len(A)): ...

很吵请安静 428

3Sum With Multiplicity

Given an integer arrayA, and an integertarget, return the number oftuplesi, j, k such thati &lt; j &lt; kandA[i] + A[j] + A[k] == target. As the answer can be very large, return it modulo10^...

m0_37889928的博客 199

【LeetCode】923. 3Sum With Multiplicity 解题报告(Python)

作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/3sum-with-multiplicity/description/ 题目描述: Given an integer array A, and an integer target, return the ...

负雪明烛 1857

可以重复的3Sum问题,注意大数取模问题

923.3Sum With Multiplicity Medium 18235FavoriteShare Given an integer arrayA, and an integertarget, return the number oftuplesi, j, k such thati < j < kandA[i] + A[j] + A[k] == targe...

qq_35747066的博客 245

LeetCode 923. 3Sum With Multiplicity

原题链接在这里:https://leetcode.com/problems/3sum-with-multiplicity/ 题目: Given an integer arrayA, and an integertarget, return the number oftuplesi, j, k such thati < j < kandA[i] + A[j]...

weixin_30650859的博客 135

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 352

LeetCode Hot 100 链表专题 三· 3 题(Java)

收录题目:2. 两数相加、19. 删除链表的倒数第 N 个结点、24. 两两交换链表中的节点。 统一结构:① 题目分析与解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结。 贯穿三题的两条主线:虚拟头结点 dummy(统一处理头结点被修改的场景)与 指针修改顺序(避免断链、丢引用)。

2401_88612756的博客 481

LeetCode 每日一题 2026/11/2-2026/11/8

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 174

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等) 题目描述: 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: - s = s1 + s2 + ... + sn - t = t1 + t2 + ... + tm - |n - m| <= 1 - 交错 是 s1 + t

huayimenghan的博客 198

LeetCode 1861. 旋转盒子|Go 双指针解法

j >= 0,如果写成j>0,会漏掉第 0 列,最左侧石头处理失败旋转矩阵行列互换:原 m 行 n 列 → 结果 n 行 m 列,make 数组长度不要写反旋转公式m-1-i:是原总行数 m,不是 n!很容易写成n-1-i区分:本题和轮转数组(189)分组循环不一样!189:所有元素固定移动 k 步,需要 gcd 分组1861:障碍物分割成多个独立段,石头向段末尾挤,用双指针更合适。

2503_92676540的博客 175
上一篇: 视觉里程计 -- 单层多层 直接法(附代码解析)
下一篇: leetcode 1046. Last Stone Weight(最后石头的重量)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值