Leetcode--923. 三数之和的多种可能

给定一个整数数组 A,以及一个整数 target 作为目标值,返回满足 i < j < 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[j],A[k]):
(1, 2, 5) 出现 8 次;
(1, 3, 4) 出现 8 次;
(2, 2, 4) 出现 2 次;
(2, 3, 3) 出现 2 次。
示例 2:

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

思路:三指针法

特殊之处在于相同数字也算不同的个数,所以每次需要判断有没有相同组成的数组之和也等于target

情况一:nums[start]与nums[end]不一样,例如示例一,1,2,5时,i=0时,通过判断,2出现2次,5出现2次,所以2*2=4次

情况二:nums[start]与nums[end]一样,例如示例二,1,2,2时,i=0时,后面4个2,选择两个即可,所以是4*3/2=6种

提示:

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

提交的代码:

class Solution {

    public int threeSumMulti(int[] nums, int target) {

         Arrays.sort(nums);

       int i,start=1,end=nums.length-1,sum=0,a,b,c,t;

       for(i=0;i<nums.length-2;i++)

       {

           a=0;

           b=0;

           c=0;

           start=i+1;

           end=nums.length-1;

           while(start<end)

           {

                a=0;

               b=0;

               c=0;

               if(nums[i]+nums[start]+nums[end]>target)

               {

                   end--;

               }

               else if(nums[i]+nums[start]+nums[end]<target)

               {

                   start++;

               }

               else

               {

                   while(nums[start]==nums[start+1]&&start+1!=end)

                   {

                       if(nums[start]==nums[end])

                       {

                           c++;

                       }

                       start++;

                       a++;

                      

                   }

                   while(nums[end]==nums[end-1]&&end-1!=start)

                   {

                       end--;

                       b++;

                       

                   }

                   if(a==0&&b==0)

                   {

                       sum++;

                   }

                   else{

                       if(nums[start]!=nums[end])

                       {

                           sum= sum+(a+1)*(b+1);

                       }

                       else

                       {

                           c+=2;

                           t = c*(c-1)/2;

                           sum+=t;

                       }

                   }

                   sum=sum%1000000007;

                   start++;

                   end--;

               }

           }

       }

       return sum;

    }

}

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

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

相关文章

nas磁盘用什么软件测试,手把手教你从NAS拿点空间当电脑硬盘使用 iSCSI开启网络硬盘共享...

手把手教你从NAS拿点空间当电脑硬盘使用 iSCSI开启网络硬盘共享2019-10-23 10:10:2095点赞1581收藏182评论前言家里的Synology DS218Play 已经用了几年了&#xff0c;当时买的两盘位DS 218PLAY&#xff0c;一直使用状况良好。跟路由器一样&#xff0c;只需要默默地工作在角落就…

深度学习?不一定非得搞“黑箱”

来源&#xff1a;TechTalks作者&#xff1a;Ben Dickson编译&#xff1a;科技行者深度神经网络的参数网络极其庞大复杂&#xff0c;也因此让机器得以实现以往难以想象的各类功能。然而&#xff0c;这种复杂性也成为制约其广泛应用的祸根&#xff1a;神经网络的内部工作机理一直…

Leetcode--904. 水果成篮

在一排树中&#xff0c;第 i 棵树产生 tree[i] 型的水果。 你可以从你选择的任何树开始&#xff0c;然后重复执行以下步骤&#xff1a; 把这棵树上的水果放进你的篮子里。如果你做不到&#xff0c;就停下来。 移动到当前树右侧的下一棵树。如果右边没有树&#xff0c;就停下来…

[No000014A]Linux简介与shell编程

Linux 介绍 内核 库: .so 共享对象&#xff0c;windows&#xff1a;dll 动态链接库 应用程序 Linux的基本原则&#xff1a; 1、由目的单一的小程序组成&#xff1b;组合小程序完成复杂任务&#xff1b; 2、一切皆文件&#xff1b; 3、尽量避免捕获用户接口&#xff1b; 4、配置…

计算机丢失first,求大神解答硬盘驱动丢失怎么办

某蛋的piglet桑回答数&#xff1a;14533 | 被采纳数&#xff1a;52016-12-23 12:51:05一、U盘重装系统准备&#xff1a;一台正常开机的电脑和一个U盘1、百度下载“U大师”(老毛桃、大白菜也可以)&#xff0c;把这个软件下载并安装在电脑上。2、插上U盘&#xff0c;选择一键制…

Leetcode--49. 字母异味词分组

给定一个字符串数组&#xff0c;将字母异位词组合在一起。字母异位词指字母相同&#xff0c;但排列不同的字符串。 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], 输出: [ ["ate",&quo…

Reading SBAR SDN flow-Based monitoring and Application Recognition

概要 在sdn下&#xff0c;控制平面基于网络测量的的数据控制网络&#xff0c;而细粒度的管理得益于细粒度的测量数据。针对sdn环境下的细粒度测量&#xff08;识别具体应用程序&#xff09;&#xff0c;可以实现对细粒度的流量管控。设计了识别系统SBAR&#xff0c;对数据流进行…

有关增强现实技术的过去、现在和未来的发展

来源&#xff1a;贤集网增强现实已经从科幻电影中跃升为基于科学的现实。早些时候&#xff0c;增强现实技术的使用成本很高&#xff0c;因此很少使用增强现实技术。研究人员没有机会经常尝试增强现实。但是今天&#xff0c;情况发生了变化。增强现实通过智能手机&#xff0c;个…

计算机改成服务器,旧电脑主机如何改成服务器

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情用户数据注…

Leetcode--438. 找到字符串中所有字母异位词

给定一个字符串 s 和一个非空字符串 p&#xff0c;找到 s 中所有是 p 的字母异位词的子串&#xff0c;返回这些子串的起始索引。 字符串只包含小写英文字母&#xff0c;并且字符串 s 和 p 的长度都不超过 20100。 说明&#xff1a; 字母异位词指字母相同&#xff0c;但排列不…

python经典一百道习题(转自奶酪博客)

无论学习哪门计算机语言&#xff0c;只要把100例中绝大部分题目都做一遍&#xff0c;就基本掌握该语言的语法了。 【程序1】 题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f; #Filename:001.py cnt …

中国科学家团队《Cell》揭示人类大脑进化的基因组调控机制

来源&#xff1a;中国生物技术网人类大脑起源于漫长的生命进化过程&#xff0c;其最显著的改变是大脑的认知功能&#xff0c;反映在脑容量的显著扩大和脑结构的高度精细化。在人类进化过程中&#xff0c;“哪些遗传改变造就了人类大脑”是学界长期力图解决的科学问题。所有器官…

终端服务器安全层在协议流中检测到错误,终端服务器安全层在协议流中检测到错误,并已取消客户端连接...

事件类型: 错误事件来源: TermDD描述:RDP 的 "DATA ENCRYPTION" 协议组件在协议流中检测到一个错误并且中断了客户机。经过网上查找资料及分析&#xff0c;原来是注册表中的“Certificate”子键被损坏&#xff0c;才导致用户无法与终端服务进行正常通信。分析&#x…

Leetcode--347. 前k个高频元素

给定一个非空的整数数组&#xff0c;返回其中出现频率前 k 高的元素。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 示例 2: 输入: nums [1], k 1 输出: [1] 说明&#xff1a; 你可以假设给定的 k 总是合理的&#xff0c;且 1 ≤ k ≤ 数组中不相同的元素的个数…

Java泛型用于方法,类和接口

什么是泛型&#xff1f; 型就是数据类型参数化。就是说原本定死的数据类型像方法中的形参一样&#xff0c;数据是不确定的&#xff0c;使用的时候由人传进去&#xff0c;泛型就是这样&#xff0c;数据类型不确定了。使用的时候再确定就可以了。 泛型的特点 是JDK1.5的新特性泛型…

人机融合的科幻与现实

来源&#xff1a;《环球》杂志 发布时间&#xff1a;2017-04-24随着光机电一体化、生物工程、生化机器人的发展和系统科学的综合进步&#xff0c;计算机自主的逻辑思维将有足够的行为表现&#xff0c;进而真正脱离人类的完全控制&#xff0c;拥有自主的智能思维。几乎可以预见&…

js读取服务器上的txt文件,javascript – 每15秒读取一次文本文件的内容

您可以在函数中重复执行要执行的代码,并在setTimeout中传递该函数.setTimeout的第二个参数将以毫秒为单位.在这里使用setTimeout IMO在这里更合适,因为它将排除发送请求和接收响应所花费的时间.它将在收到响应后每5秒发送一次请求.$(document).ready(function() {function func…

Leetcode--128. 最长连续序列

给定一个未排序的整数数组&#xff0c;找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 思路:存入map中&#xff0c;每次以当前元素为序列的第一个数字&#xff0…

Opencv级联分类器实现人脸识别

在本章中&#xff0c;我们将学习如何使用OpenCV使用系统相机捕获帧。org.opencv.videoio包的VideoCapture类包含使用相机捕获视频的类和方法。让我们一步一步学习如何捕捉帧 - 第1步&#xff1a;加载OpenCV本机库 在使用OpenCV库编写Java代码时&#xff0c;您需要做的第一步是使…

服务器的防火墙禁止了对指定通讯端口的访问,使用iptables限制访问网站指定端口...

Linux用得比较少&#xff0c;所以对iptables也不是很熟悉&#xff0c;最近部署网站&#xff0c;因为对外的80端口是通过nginx转发&#xff0c;而内部程序都是类似8080、3000之类的端口&#xff0c;不做处理的情况下&#xff0c;很可能会看到如:地址www.poorren.com、地址www.po…