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])]              //如果两数索引不同,直接返回
 

猜你喜欢

转载自blog.csdn.net/qq_36791000/article/details/81102466