我正在嘗試通過蠻力演算法解決 twoSum LeetCode 問題。本質上,問題是找到兩個等于目標的數字的索引。因此,如果我有一個串列 [7,2,4,1] 并且我的目標是 9,我將回傳 7 和 9 的索引(在這個例子中是 [0,1])作為解決方案。
我在這里寫了這個演算法:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
if (len(nums) < 2):
return False
count = 0
for i in range(len(nums)):
for j in range (i 1, len(nums)):
if nums[i] nums[j] == target:
ans = str(nums.index(nums[j])) str(nums.index(nums[i]))
return ans
count = count 1
它適用于所有情況,除了串列中的兩個元素重復的一種情況。因此,如果串列包含目標為 6 的 [3,3],我的演算法將回傳索引 [0,0] 而不是 [0,1]。是什么導致了這個問題,解決這個問題的正確解決方案是什么?
uj5u.com熱心網友回復:
ans = str(nums.index(nums[j])) str(nums.index(nums[i]))
發生這種情況是因為您嘗試在該行上獲取索引 3 兩次,這將回傳索引 0 兩次。為什么不回傳字串i和j本身,因為它們已經是索引?所以:
ans = str(j) str(i)
uj5u.com熱心網友回復:
問題不在于您的演算法,而在于您在字串 ( ans = str(nums.index(nums[j])) str(nums.index(nums[i])))中翻譯答案的方式
l.index(i)將回傳l包含值 i 的第一個索引,因此當值重復時,我相信nums.index(nums[j])==nums.index(nums[i])您實際上想要ans = str(j) str(i)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/510100.html
標籤:Python列表算法
