美文网首页
[Leetcode]1.Two Sum

[Leetcode]1.Two Sum

作者: 炭烧熊猫 | 来源:发表于2019-04-29 16:40 被阅读0次

今天看到某位大神的一句话,就作为开篇寄语吧。平生不识TwoSum,刷尽LeetCode也枉然。第一题是一道Easy的练手题。

题目

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0,1].

翻译

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用

注意审题

1. 假定每组输入,只有一种解法,也就是返回数组是唯一的。

2. 相同的元素是不能被使用两次的

解题

解法1

因为是简单类型,所以拿过来不经过太多思考就可以给出一个最简单思路,循环遍历数据两遍,取出数字相加和目标数字比较即可得出答案。

Java Solution 1:


class Solution {

    public int[] twoSum(int[] nums, int target) {

        for(int i =0 ; i< nums.length; i++){

            int numOne = nums[i];

            for( int j=i+1; j< nums.length; j++){

                if (j == i)

                    break;

                if (numOne + nums[j] == target)

                    return new int[]{i,j};

            }

        }

          return new int[]{};

    }

}

这种解题思路简单直接,但考虑到时间复杂度的话是O(n^2). 可以看到收到的报告结果。

image

Java Solution 2:

一般的思路是降低时间复杂度,就是要从空间复杂度下手,多站内存,少循环的思路。用HashMap来维护数据和Index之间的关系,从而将时间复杂度降到 O(n)


class Solution {

    public int[] twoSum(int[] nums, int target) {

        Map<Integer,Integer> indexMap = new HashMap<Integer,Integer>();

        for (int i=0; i< nums.length; i++) {

            Integer index = indexMap.get(target - nums[i]);

            if (index != null)

                return new int[]{index, i};

            else

                indexMap.put(nums[i], i);

        }

        return new int[]{};

    }

}

这样提交后的统计结果,时间成本下降了许多

image

Phython Solution 3:

这个solution 纯是自己胡乱思考出来,说白了,把每个数组里的数字都扩展成一个 和 原数组等长的 1 * m 的数组, 需要m 个,然后相加, 再从结果中找出是目标和数字的index 就完成了。由于LeetCode 不支持numpy 所以没能提交

import numpy as np

class Solution:

    def twoSum(self, nums, target):
       #原数组
        numsm = np.array(nums)

        for num in nums:
            index1 = nums.index(num)
            #每个数据新生成的 1 * m 数组
            matrix = np.ones(nums.__len__()) * num

            a = matrix + numsm
            #get target index if exists
            if np.argwhere(a == target).size > 0:
                index2 = np.argwhere(a == target)[0][0]

        if index1 != index2:
            return [index1, index2]

        return []

相关文章

网友评论

      本文标题:[Leetcode]1.Two Sum

      本文链接:https://www.haomeiwen.com/subject/tpfunqtx.html