数据结构与算法-001-数组-两数之和

58 篇文章 0 订阅
两数之和
给定一个数组 n 以及一个目标值 t ,从数组中找到相加等于 t 的两个数字索引
暴力法
解题思路
双层循环,时间复杂度 O(n^2)
public int [] towSum(int [] n,int t){
   // 边界条件
   if(n.length<2){
      return new int[]{};
   }
   int [] result=new int [2];
   for(int i=0;i<n.length;i++){
     for(int j=i+1;j<n.length;j++){
       if(n[i]+n[j]==t){
          result[0]=i;
          result[1]=j;
          return result;
       }
     }
   }
   return new int[0]{};
}
空间换时间
解题思路
使用一个hash存储循环过的值,时间复杂度 O(n)
    public int[] twoSum(int[] nums, int target) {
       // 空间换时间思路
       // 核心要点:目标值=数组值a+数组值b ,即 数组值a/b=目标值-数组值a/b
       // 基于 a=b+c,b=a-c,c=a-b 所以可以将数据存储在一个hashmap的key中,value 存储索引
       // 使用 b=a-c、c=a-b 原理从cache里找到到b/c对应的值即可找到两个b\c的索引
       Map<Integer,Integer> cache=new HashMap();
       for(int i=0;i<nums.length;i++){
           int key=target-nums[i];
           Integer inx=cache.get(key);
           // 找到差值了
           if(inx!=null){
               return new int[]{inx,i};
           }
           cache.put(nums[i],i);
       }
       return new int[]{};
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值