2018暑假第一題
題目:
給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。
你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
連結:https://leetcode-cn.com/problems/two-sum/description/
非常low的答案程式碼:
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(len(nums)):
for j in range(len(nums)):
if (i!=j):
if(nums[i]+nums[j]==target):
return [i,j]
這道題非常的簡單了,是為了熟悉python才選擇的簡單題,python語法啥的我都忘了。。。弄了好久才對的,然後下面是大神(網上搜的)程式碼:
class Solution(object):
def twoSum(self, nums, target):
nums_bak = nums.copy() //將原陣列copy一份,最後的時候取索引
nums.sort() //排序
i = 0
j = 0
for k in range(0, (len(nums) - 1)): //由於是排序過的,因此只需要將相鄰倆個元素相加,直到大於等於
if nums[k] + nums[k + 1] >= target: //需要找的目標,就可以停止了,進入下一步
i = k
j = k + 1
break
while i >= 0 and j < len(nums): //判斷索引有沒有越界
if nums[i] + nums[j] < target: //如果結果小了,向前找更小的
j += 1
elif nums[i] + nums[j] > target: //如果結果大了,向後找更大的
i -= 1
else:
if nums[i] == nums[j]:
return [nums_bak.index(nums[i]), nums_bak.index(nums[j], i + 1)] //如果兩數索引相等,加一位座標記位(?沒太 //看懂這一行)
else:
return [nums_bak.index(nums[i]), nums_bak.index(nums[j])] //如果兩數索引不同,直接返回