刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等
题目:
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,
下标 ,a ,b , c 对应数相加等于 targe 找出所有满足条件且不重复的三元组下标
解析:
在一个list里面找出来三个数字使这三个数字相加等于目标targe,
这里是一个list 我们去循环这里面的元素,我们利用for循环, 第一个取来,然后后剩下的元素分别取循环上一个循环剩下的元素。这样保证了不重复,最后验证下,如果找出来的数字的值满足a+b+c=targe ,且三个数不相等,我们认为查询正确。
那么我们看下python代码是如何实现的
def findthree(nums:list,targe:int):
if len(nums)<3:
return False
result=[]
for a in range(len(nums)):
for b in range(len(nums))[a:]:
for c in range(len(nums))[b:]:
try:
if nums[a]+nums[b]+nums[c]==targe and a!=b and b!=c and a!=c :
result.append((a,b,c))
except:
return False
return result
那么我们看下测试代码
import unittest
from findthree import findthree
class TestCae(unittest.TestCase):
def setUp(self) -> None:
pass
def tearDown(self) -> None:
pass
def testone(self):
reslt=findthree([],6)
self.assertFalse(reslt)
def testtwo(self):
reslt = findthree([1], 6)
self.assertFalse(reslt)
def testthree(self):
reslt = findthree([1,'2'], 6)
self.assertFalse(reslt)
def testFor(self):
reslt = findthree([1,'2',"2"], 6)
self.assertFalse(reslt)
def testfive(self):
reslt = findthree([1,2,3], 6)
self.assertEqual(reslt,[(0,1,2)])
def testsix(self):
reslt = findthree([1,2,3,3], 6)
self.assertEqual(reslt,[(0,1,2),(0,1,3)])
if __name__=="__main__":
unittest.main()
看下运行结果:
看下最后代码的覆盖率
这样我们就测试完毕我们写的代码了。 那么我们认为目前测试用例覆盖了百分之百路径下面所有的分支,认为代码没有bug,测试通过。
接下来,我们看下java版本的实现
public class Fintrhee {
public List<Map<String,Integer>> find(List<Integer> list, Integer targert){
List<Map<String,Integer>> resultList=new ArrayList<>();
if (list.size()<3){
return null;
}
for (int a=0;a<list.size();a++ ){
for(int b=a;b<list.size();b++){
for(int c=b;c<list.size();c++){
if (list.get(a)+list.get(b)+list.get(c)==targert && !new Integer(a).equals(new Integer(b))&&!new Integer(a).equals(new Integer(c))&&!new Integer(c).equals(new Integer(b))){
Map<String,Integer> map=new HashMap<>();
map.put("a",a);
map.put("b",b);
map.put("c",c);
resultList.add(map);
}
}
}
}
return resultList;
}
}
测试代码:
public class FintrheeTest {
@Test
public void testFind() {
Fintrhee fintrhee=new Fintrhee();
List<Integer> integerList=new ArrayList<>();
integerList.add(0);
List<Map<String,Integer>> maps=fintrhee.find(integerList,1);
assertEquals(null,maps);
}
@Test
public void test2Find() {
Fintrhee fintrhee=new Fintrhee();
List<Integer> integerList=new ArrayList<>();
integerList.add(1);
integerList.add(2);
integerList.add(3);
List<Map<String,Integer>> maps=fintrhee.find(integerList,1);
List<Map<String,Integer>> mapList=new ArrayList<>();
assertEquals(maps,mapList);
}
@Test
public void test3Find() {
Fintrhee fintrhee=new Fintrhee();
List<Integer> integerList=new ArrayList<>();
integerList.add(1);
integerList.add(2);
integerList.add(3);
List<Map<String,Integer>> maps=fintrhee.find(integerList,6);
List<Map<String,Integer>> mapList=new ArrayList<>();
Map<String,Integer> map=new HashMap<>();
map.put("a",0);
map.put("b",1);
map.put("c",2);
mapList.add(map);
assertEquals(maps,mapList);
}
}
测试结果:
覆盖率:
刷题还在继续,文章优化在下面公众号首发,

刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等的更多相关文章
- 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...
- [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.
给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...
- 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序
题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序 public static int maxGap(int nums[]) { if ( ...
- C#LeetCode刷题之#189-旋转数组(Rotate Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3700 访问. 给定一个数组,将数组中的元素向右移动 k 个位置, ...
- 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...
- 【IT笔试面试题整理】给定一个数组a[N]构造数组b [N]
[来源]:腾讯2013实习生笔试 给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]-a[N-1] / a[j])空间复杂度和O(n)的时间复杂度:除遍历计数器与a ...
- 算法:Manacher,给定一个字符串str,返回str中最长回文子串的长度。
[题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左 ...
- Gym 101064 D Black Hills golden jewels 【二分套二分/给定一个序列,从序列中任意取两个数形成一个和,两个数不可相同,要求求出第k小的组合】
D. Black Hills golden jewels time limit per test 2 seconds memory limit per test 256 megabytes input ...
- C#LeetCode刷题之#34-在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4970 访问. 给定一个按照升序排列的整数数组 nums,和一个目 ...
随机推荐
- PHP基于TP5使用Websocket框架之GatewayWorker开发电商平台买家与卖家实时通讯
前段时间公司提了一个新的需求,在商品的详情页要实现站内买家和商品卖家实时通讯的功能以方便沟通促成交易,要开发此功能当时首先考虑到的就是swoole和workerman了,从网上大概了解了一下关于这两款 ...
- JavaWeb 之 Filter:过滤器
一.Filter 概述 1.概念 web 中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能. 2.作用 一般用于完成通用的操作.如:登录验证.统一编码处理.敏感字符等功能 ...
- 英语eschaunge交易所
eschaunge Eschaunge是一个外文单词,名词译为交易所,交易,交换,兑换(率),动词译为兑换, 交换,互换,交换,调换.是Exchange的替代形式 中文名:交易所,交易,交换 外文 ...
- 继续了解Java的纤程库 – Quasar
前一篇文章Java中的纤程库 – Quasar中我做了简单的介绍,现在进一步介绍这个纤程库. Quasar还没有得到广泛的应用,搜寻整个github也就pinterest/quasar-thrift这 ...
- 华为云主机配置yum源
问题: 拥有华为主机,配置华为云mirrors,不走公网流量加速体验 系统: centos7.6 解决: 01.华为云mirrors https://mirrors.huaweicloud.com/ ...
- Linux DHCP 中继
具体到一个公司的网络环境中,不可能只有一个VLAN,更不可能对每个VLAN都架设一个DHCP服务器,这时就要做一个DHCP的中继,使得DHCP的广播可以通过VLAN. 实验拓扑 三层交换机下面连接一台 ...
- [AWS][GUI][VNC]rhel 7 安装GUI ,配置VNC
预计阅读时间:15分钟 预计配置时间:30分钟 (前提是已经申请AWS的EC2的rhel7 云主机并且成功运行) 目前AWS 亚马逊云免费试用一年,申请一个学习使用 痛点:没有GUI,无法搭建Jen ...
- Python面向对象三要素-多态
Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...
- Kubernetes网络之Flannel工作原理
目录 1.Docker网络模式 1.1 bridge网络的构建过程 1.2 外部访问 2.Kubernetes网络模式 2.1 同一个Pod中容器之间的通信 2.2 不同Pod中容器之间的通信 2.3 ...
- root用户被提示:Operation not permitted
一.问题 今天为了删除一个多余的的软件,在删除该软件安装目录时,提示rm: cannot remove ‘.user.ini’: Operation not permitted,root权限都不能删除 ...