今天下午,看了一會github,想刷個題呢,就翻出來了刷點題提高自己的實際中的解決問題的能力,在面試的過程中,我們發現,其實很多時候,面試官 給我們的題,其實也是有一定的隨機性的,所以我們要多刷更多的題。去發現問題。
題目:
給定一個整數數組 nums 和一個目標值 taget,請你在該數組中找出和為目標值的那 兩個 整數,
並返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。
解析:
實際這里就是給你的一個列表的數字,給你一個預期,讓你返回
這個列表里面兩個數字相加等於這個預期的數字的下標。
代碼思路:
1.直接用到兩個for循環,去遍歷這個list,
2.一個for循環從第一個元素,一個for循環從減去這個元素的list里面去遍歷
3.然后去判斷這個兩個的元素相加的和是否等於預期的taget,如果等於,直接返回元素的下標。
4. 這里可能返回多個,我們默認選擇第一組。
實現代碼:
class Solution():
def twoSun(self,nums,target):
for i in range(len(nums)):
for j in range(len(nums)):
if nums[i]+nums[j] ==target and i !=j:
return [i,j]
那么我們先來個簡單的測試,去測試一下:
if __name__=="__main__":
solution=Solution()
print(solution.twoSun([1,2,3,4,5,6],5))
執行打印結果:
那么我來看下給定的list里面是否是對的。
我們知道python的list是從0開始計數的,即0的下標的元素就是list的里面第一個元素,然后一次類推。
我們可以看到下標是0 和3的元素分別是1和4,1+4=5
符合預期,認為代碼通過。
下面我們做下單元測試:
class TestCase(unittest.TestCase):
def setup(self):
pass
def tearDown(self) -> None:
pass
def testcaseone(self):
self.solution = Solution()
result=self.solution.twoSun([1, 2, 3, 4, 5, 6], 5)
self.assertEqual(result,[0,3])
def testcasetow(self):
self.solution = Solution()
result = self.solution.twoSun(["1", 2, 3, 4, "5", 6], "5")
self.assertEqual(result, [0, 3])
def testcasethree(self):
self.solution = Solution()
result = self.solution.twoSun(["a", 2, 3, 4, "b", 6], "ab")
self.assertEqual(result, False)
if __name__=="__main__":
unittest.main()
測試代碼運行后,我們發現了其中的錯誤。其實我們沒有對入參進行控制,隨后我們對代碼進行升級,
class Solution():
def twoSun(self,nums:list,target:int):
for i in range(len(nums)):
for j in range(len(nums)-i):
try:
if nums[i]+nums[j] ==target and i !=j:
return [i,j]
except:
return False
運行結果
所以在測試過程中,我們一定要對我們的代碼進行一定的單元測試。單元測試進行的越早,我們的問題發現的越早。寫好的代碼自己一定要進行測試。