两数之和

作者: coder_flag | 来源:发表于2018-09-05 00:27 被阅读0次

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

    你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

    示例:
    给定 nums = [2, 7, 11, 15], target = 9
    
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
    

    解法1:
    简单直接,暴力搜索,时间复杂度是O(n^2);

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

    解法2:
    使用map,把算法时间复杂度降为O(n) ,a+b=c ;a = c - b; 题目说明数组元素不会重复。Map的key为数组中的值,map的value为数组下标。当前数组是a时只需要找到key为b的值即可。(这算法值得好好想想)

    public int[] twoSum(int[] nums, int target) {
            int[] sum = new int[2];
            Map<Integer,Integer> map  = new HashMap<>(nums.length);
            for (int i = 0; i < nums.length; i++) {
                int value = target-nums[i];
                Integer index = map.get(value);
                if (index != null && index != i) {
                   sum[0] = i;
                    sum[1] = index;
                    break;
                }
                map.put(nums[i],i);
            }
            return sum;
        }
    
    

    BB一句:

    注意时间复杂度。。。。

    相关文章

      网友评论

        本文标题:两数之和

        本文链接:https://www.haomeiwen.com/subject/wfdowftx.html