zoukankan      html  css  js  c++  java
  • leetcode-算法系列-两数之和

       本系列的题目都是出自于"leetcode" 用博客记录是为了加强自己的记忆与理解,也希望能和大家交流更好更优的解题思路.

      题目: 

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

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

      示例:

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

    解决方案1( java ):
      思路: 数组中某个元素的值为 c + x(未知数) = target,x = target-c, 那么依次遍历所有元素,设元素为c,求出x后检查x是否在数组中,如果存在就返回元素索引。
       暴力法:
          for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
              if(nums[j]=target-nums[i] ){ return new int[]{i,j} }
            }
          }

       效率: 数组中有x个元素,最坏情况需要遍历所有元素x*x次,那么时间复杂度为 O (n^2 ) ; 由于没有使用任何临时变量,所以复杂度为 O(1);
        
      优化方案1:
         利用哈希。哈希表中存储数组中每个元素的值和坐标 ,可以通过值查询坐标 而不用遍历所有数组.
       一遍哈希:
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums.length;i++ ){
          int key= target-nums[i];
          if(map.containsKey(key)){ return new int[]{map.get(key),i } }
          map.put(nums[i],i);
        }
        
        时间复杂度: 每个元素的对应解的查找只有一次,所以为 O(n),
    空间复杂度: O(n) 需要额外空间来来存储数组的每个元素.



       注意: 以上大部门内容转载于 leetcode,请注意~!!!


  • 相关阅读:
    【AS3代码】类的分包
    语句include和require的区别是什么?
    php创建多级目录的函数
    【AS3代码】打砖块
    【AS3代码】弧度的转换
    【AS3代码】是男人就坚持30秒
    每天问女儿的四个问题
    PowerDesigner16生成SQL2005列注释
    做分析师=盖房子【转】
    用gephi自动分析网站链接方式
  • 原文地址:https://www.cnblogs.com/zhaohuaxishi/p/9894579.html
Copyright © 2011-2022 走看看