LeetCode刷题系列_1题

来源:互联网 发布:js微信支付接口开发 编辑:程序博客网 时间:2024/06/05 14:58

题目要求:
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.

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

我的Solution:

        int length = nums.length;        int[] res = {};        int lastIndex = nums.length-1;        ArrayList<Integer> result = new ArrayList<Integer>();        while(length > 0) {            int last = nums[length-1];            for(int i=0;i<length-1;i++) {                if(nums[i]+last == target) {                    result.add(i);                    result.add(lastIndex);                    res = new int[result.size()];                    for (int j=0;j<result.size();j++) {                        res[j] = result.get(j);                    }                    return res;                }            }            lastIndex -= 1;            length -= 1;        }        return res;

跟我写的一个效率但是比我整洁的写法(反正都是暴力遍历求解,O(n2)的时间复杂度):

      int length = nums.length;      int index1 = 0;      int index2 = 0;      for (int i=0;i<length;i++) {          for(int j=i+1;j<length;j++) {              if(nums[i] + nums[j] == target) {                  index1 = i;                  index2 = j;              }          }      }      int[] returnValue = new int[] {index1, index2};      return  returnValue;

O(n)复杂度的解法(想法很好)

    public int[] twoSum(int[] nums, int target) {        Map<Integer, Integer> map = new HashMap<Integer, Integer>();        for(int j=0;j<nums.length;j++) {            int x = nums[j];            if(map.containsKey(target-x)) {                return new int[] { map.get(target-x), j };            }            map.put(x, j);        }        throw new IllegalArgumentException("no two sum solution");    }

这就是差距啊,妈蛋,是个坑老子也要填平了!

0 0
原创粉丝点击