刷题:判断是否存在重复元素
题目:
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。
如果数组中每个元素都不相同,则返回 false。
解析:给定数组,数组有重复元素,就返回true,没有返回false,这是典型的用list和for循环的题。思路:for循环遍历list,去判断第一个 和剩余的是否存在相等的,有相等的 代表存在重复元素,返回true,否则,返回false。
我们看python版本怎么实现的,代码如下:
1 2 3 4 5 6 | def listfind(nums: list ) - > int : for i in range ( len (nums)): for j in range ( len (nums))[i:]: if nums[j] = = nums[i] and j! = i: return True return False |
测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import unittest from four import listfind class TestCae(unittest.TestCase): def setUp( self ) - > None : pass def tearDown( self ) - > None : pass def testone( self ): reslt = listfind([]) self .assertFalse(reslt) def testtwo( self ): reslt = listfind([ 1 ]) self .assertFalse(reslt) def testthree( self ): reslt = listfind([ 1 , 1 ]) self .assertTrue(reslt) if __name__ = = "__main__" : unittest.main() |
测试结果
测试代码覆盖率:
python版本的实现还是不是特别难的,比较容易理解,我们接下来看下java版本是如何实现的?
实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Four { public boolean find(List<Integer> list) { for ( int a = 0 ; a < list.size(); a++) { for ( int b = a; b < list.size(); b++) { if (list.get(a).equals(list.get(b)) && ! new Integer(a).equals( new Integer(b))) { return true ; } } } return false ; } } |
测试代码:
public class FourTest { @Test public void testFind() { Four four=new Four(); List<Integer> list=new ArrayList<Integer>(); boolean rest=four.find(list); assertFalse(rest); } @Test public void testFind2() { Four four=new Four(); List<Integer> list=new ArrayList<Integer>(); list.add(0); boolean rest=four.find(list); assertFalse(rest); } @Test public void testFind3() { Four four=new Four(); List<Integer> list=new ArrayList<Integer>(); list.add(0); list.add(0); boolean rest=four.find(list); assertTrue(rest); } @Test public void testFind4() { Four four=new Four(); List<Integer> list=new ArrayList<Integer>(); list.add(0); list.add(1); list.add(0); boolean rest=four.find(list); assertTrue(rest); } }
测试结果:
代码覆盖率:
我们通过python和java两个版本的实现,可以看出来,其实有些问题的解决出来,并不是那么难,关键是在于思路,与没有一个合理的思路去解决这个问题。 有了好的思路,还要去实现,用代码去实现自己的想法,实现后,增加相对应的校验,并且辅助测试代码进行测试。
在实际的代码中,我们要多做测试,因为底层的测试改动的成本最低。
关注公众号,雷子说测试,持续更多的优质内容推送给大家。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?