Problem 1: Two Sum

来源:互联网 发布:屏幕像素算法 编辑:程序博客网 时间:2024/05/29 12:14

问题:

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(n2)的(后来发现leetcode上不是算你的算法效率。。。是运算时间,java比较慢,所以写O(n2)的程序会超时。。。。。。)

这道题最直接的想法肯定就是暴力法了,双层循环遍历所有可能,但是时间过长,提交不通过

另外一个思路就是先排序,然后从两头找,这种方法的性能受限于排序的性能,排序算法有时间复杂度为O(nlogn)的和O(n2)的。O(nlogn)的有快速排序、堆排序或归并排序序。

除了快排都忘得差不多了,得好好复习一下。

从别人那里的来了一个思路是使用Map,这个方法比较巧妙,只需要一次遍历即可:

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

另外,leetcode验证通过后,发现了一个很奇怪的统计图:



Java的速度竟然比Python要慢?。。。我一直以为Python比Java要慢的

leetcode上可以提交python程序,一直想学Python,正好借这次机会学一下~


0 0
原创粉丝点击