leetcode第1題——**Two Sum

題目

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

思路

如果按照一般的思路,使用兩層循環嵌套時間複雜度爲O(n^2),這會造成運行時間太長,無法通過。可以使用字典,將列表值和下標分別存儲爲字典的鍵和值,這樣查找字典的時間複雜度爲O(1),只需一層循環嵌套即可,時間複雜度爲O(n),這裏是犧牲了空間換時間,因爲需要額外的存儲和空間存儲字典。

代碼

Python

class Solution(object):
    # @return a tuple, (index1, index2)
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        dic = {}
        size = len(nums)
        for i in range(size):
            dic[nums[i]] = i
        for i in range(size):
            if dic.get(target-nums[i]):
                return i+1,dic.get(target-nums[i])+1

Java

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];
        int i;
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        for(i = 0;i < nums.length;i++)
            map.put(nums[i],i);
        for(i = 0;i < nums.length;i++)
            {
            if(map.containsKey(target - nums[i]))
                {
                result[0] = i+1;
                result[1] = map.get(target-nums[i])+1;
                if(result[0] != result[1])
                    break;
                }
            else
                continue;
            }
        return result;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章