• Two Sum(两个数的相加)


    2017.11.10

    题目描述:
    Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
    解题思路:
    1.暴力解法
    强行判断nums[i]+nums[j]==target
        /**
        *暴力解法,时间复杂度是O(n^2)
        */
        public int[] twoSum(int[] nums, int target) {
            for(int i=0;i<nums.length;i++){
                for(int j=i+1;j<nums.length;j++){
                    if(nums[i]+nums[j]==target){
                        return new int[]{i,j};
                    }
                }          
            } 
            throw new IllegalArgumentException("no such num!");
        }

    2.利用hashMap的key-value特性

    a.为数组建立索引
    b.在索引中查找有没有target-nums[i]的key,并且满足不是数的本身

    /**
    *利用hashMap的查找元素的时间复杂度为O(1)
    *总的时间复杂度是2O(n),即O(n),空间复杂度是O(n)
    */    
    public int[] twoSum(int[] nums, int target) {
           Map<Integer,Integer> map= new HashMap<Integer,Integer>();
            for(int i=0;i<nums.length;i++){
                map.put(nums[i],i);
            }
            for(int i=0;i<nums.length;i++){
                int num=target-nums[i];
                //判断map中是否有这个数,并且这个数不是目前这个数
                if(map.containsKey(num)&&map.get(num)!=i){
                    return new int[]{i,map.get(num)};
                }
            }
    
            throw new IllegalArgumentException("no such num!");
        }

    3.map中找到就中止

    a.先判断map中有没有这个数

    b.如果有,则直接返回

        public int[] twoSum(int[] nums, int target) {
           Map<Integer,Integer> map= new HashMap<Integer,Integer>();
           for(int i=0;i<nums.length;i++){
           int num = target-nums[i];
           if(map.containsKey(num)){
               return new int[]{map.get(num),i};
           }
               map.put(nums[i],i);
       }
    
            throw new IllegalArgumentException("no such num!");
        }
  • 相关阅读:
    Pandas怎样按条件删除行?
    分享一个百度大牛的Python视频系列下载
    Python的几个高级编程技巧
    Pandas系列-读取csv/txt/excel/mysql数据
    判断质数
    mac命令行光标操作快捷键
    私有Docker部署GitLab重置管理员密码
    noip2012借教室
    乘法逆元
    noip2008T2 火柴棒等式
  • 原文地址:https://www.cnblogs.com/huhu1203/p/7817351.html
Copyright © 2020-2023  润新知