題目:
給定一個的整數數組 nums,
和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。
題目解析:
1.給定一個數組,確定的是一個數組, 數組是整數,那么我們可以知道,那么target的也是整數。
2.要求target的在數組中開始位置和結束位置,我們可以先找出來target的在list里面的下標位置,把這些下標位置放到list里面,我們去取list里面的第一個元素和最后一個元素,就是對應的開始位置和結束位置。
那么我們就可以上手去實現我們的代碼了。
從這期開始,我們的代碼將用python 和java兩個版本去實現,同時從兩方面去提高我們的,同時 也面向了兩門語言的學習者。
首先,我們先看python篇:
def find(nums:list,target:int): listone=[] for i in range(len(nums)): if nums[i]==target: listone.append(i) if len(listone)==0: return False return listone[0],listone[-1]
測試:
class Testcase(unittest.TestCase): def setUp(self) -> None: pass def tearDown(self) -> None: pass def testone(self): result=find([1,2,3,4],5) self.assertFalse(result) def testtwo(self): result=find([1,2,3,4],1) self.assertEqual(result,(0,0)) def testthree(self): result=find([1,2,3,4,1],1) self.assertEqual(result, (0, 4)) def testfour(self): result = find([1, 2, 3, 4, 1], "1") self.assertEqual(result, False) def testfive(self): result = find(["1", 2, 3, 4, 1], 1) self.assertEqual(result, (4, 4)) def testsix(self): result = find([ 1], 1) self.assertEqual(result, (0, 0)) if __name__=="__main__": unittest.main()
測試結果:
我們可以看到目前是沒有發現問題的。這樣,python版本實現完畢,
接下來我們去看看,對應的java版本是怎么實現的。
實現代碼:
public class Find { public Map<String,Integer> findby(List<Integer> list, Integer targert){ List<Integer> integerList=new ArrayList<>(); for (int i=0;i<list.size();i++){ if(list.get(i).equals(targert)){ integerList.add(i); } } Map<String,Integer> map=new HashMap<>(); if (integerList.size()==0){ map.put("first",null); return map; }else { map.put("first",integerList.get(0)); map.put("last",integerList.get(integerList.size()-1)); return map; } } }
測試代碼:
public class FindTest { @org.testng.annotations.Test public void testFindby() { List<Integer> integerList=new ArrayList<>(); integerList.add(0); Find find=new Find(); Map<String,Integer>map=find.findby(integerList,1); assertEquals(map.get("first"),null); } @org.testng.annotations.Test public void testFindby1() { List<Integer> integerList=new ArrayList<>(); integerList.add(0); Find find=new Find(); Map<String,Integer>map=find.findby(integerList,0); assertEquals(map.get("first"),new Integer(0)); assertEquals(map.get("first"),new Integer(0)); } @org.testng.annotations.Test public void testFindby2() { List<Integer> integerList=new ArrayList<>(); integerList.add(0); integerList.add(0); Find find=new Find(); Map<String,Integer>map=find.findby(integerList,0); assertEquals(map.get("last"),new Integer(1)); assertEquals(map.get("first"),new Integer(0)); } @org.testng.annotations.Test public void testFindby3() { List<Integer> integerList=new ArrayList<>(); integerList.add(0); integerList.add(0); integerList.add(0); Find find=new Find(); Map<String,Integer>map=find.findby(integerList,0); assertEquals(map.get("last"),new Integer(2)); assertEquals(map.get("first"),new Integer(0)); } @org.testng.annotations.Test public void testFindby4() { List<Integer> integerList=new ArrayList<>(); integerList.add(0); integerList.add(1); integerList.add(0); Find find=new Find(); Map<String,Integer>map=find.findby(integerList,0); assertEquals(map.get("last"),new Integer(2)); assertEquals(map.get("first"),new Integer(0)); } }
測試結果:增加了代碼覆蓋率,
覆蓋率
那么我們測試完畢,根據測試覆蓋率來說,我們目前的測試是已經完成了覆蓋了百分之百的路徑和代碼。
后續會陸續給大家分享更多的題目,更多的代碼,大家一起成長,一起刷題。雷子說測試,帶給你不一樣的體驗。力爭所有的代碼都做到100%的覆蓋率,所有代碼都進行單測。
所有文章優先在公眾號推送。