1. 两数之和

 

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

 

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

 

 

 

示例:

 

给定 nums = [2, 7, 11, 15], target = 9

 

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

1. 暴力解

class Solution:
    def __init__(self):
        print(111)
    #def twoSum(self, nums: List[int], target: int) -> List[int]:
    def twoSum(A, target):
        index=[]
        for i in range(len(A)):
            for j in range(i+1,len(A)):
                if A[i]+A[j]==target:
                    index.append(i)
                    index.append(j)
                    return index

 2、双指针

def find_repeat(source, elmt):  # The source may be a list or string.

    elmt_index = []

    s_index = 0;
    e_index = len(source)

    while (s_index < e_index):

        try:

            temp = source.index(elmt, s_index, e_index)

            elmt_index.append(temp)

            s_index = temp + 1

        except ValueError:

            break

    return elmt_index

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        i=0
        j=len(nums)-1
        index=[]
        while i<=j:
            print("i is ",i)
            print("j is ",j)
            B=copy.deepcopy(nums)
            B.sort()
            # print(B)
            if B[i]+B[j]==target:
                if B[i]==B[j]:
                    index=find_repeat(nums,B[i])
                    return index
                else:
                    index.append(nums.index(B[i]))
                    index.append(nums.index(B[j]))
                    return index
            if B[i] + B[j] > target:
                j=j-1
            if B[i] + B[j] < target:
                i=i+1

  

 

  

posted @ 2020-12-01 10:20  noticeable  阅读(73)  评论(0)    收藏  举报