LeetCode_1——两数之和(Two sum)

深知程序员和码农的区别在于数据结构与算法,所以,我要开始刷Leetcode题目的道路,嘻嘻

题目

给定一个整数数组,返回两个数字的索引,使它们相加到特定目标。

您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。

给定nums = [2,7,11,15],target = 9,
因为nums [ 0 ] + nums [ 1 ] = 2 + 7 = 9,
返回[ 01 ]。

解法一

思想

   暴力破解,两次循环遍历将数组中的数分别相加等于target,再返回索引

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] arrs=new int[2]; ;
        int sum=0;
        for (int i = 0; i <nums.length; i++) {
            for (int j = 0; j <nums.length&&i!=j ; j++) {
                sum=nums[i]+nums[j];
                if(target==sum){
                    arrs[0]=i;
                    arrs[1]=j;
                }

            }
        }

        return arrs;
    }
}

结果

  执行用时 :95 ms, 在所有Java提交中击败了8.21% 的用户  

  内存消耗 :37.2 MB, 在所有Java提交中击败了90.74%的用户

  用时过长,典型的时间换空间的做法

解法二

思路

int[] arrs=new int[2]; ;
        int sum=0;
        HashMap<Integer,Integer> hashMap=new HashMap<>();
        for (int i = 0; i <nums.length; i++) {
            hashMap.put(nums[i],i);
        }
        for (int i = 0; i <nums.length; i++) {
            int num=target-nums[i];
            if(hashMap.containsKey(num)&&hashMap.get(num)!=i){
                arrs[0]=i;
                arrs[1]=hashMap.get(num);
                break;
            }
        }
return arrs;

结果

  执行用时 :7 ms, 在所有Java提交中击败了88.43% 的用户
  内存消耗 :38.9 MB, 在所有Java提交中击败了51.18%的用户

猜你喜欢

转载自www.cnblogs.com/echola/p/11003612.html