Problem 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(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值