查询(HashMap)和遍历(数组)

博客介绍了为获更快执行速度,查询元素多于遍历时可用HashMap,其通过哈希算法确定元素位置;遍历元素多于查询时可用数组直接读取。还给出例子,对比了查询和数组遍历的代码耗时及时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      为了得到更快的执行速度,当查询某个元素多于遍历时可使用HashMap,HashMap的查询是根据哈希算法直接确定元素位置,不用和每一个元素作对比;当遍历某个元素多于查询时,可以使用数组直接读取数据元素,减少了计算元素地址的时间。以下为例子:

   此题,用查询的方法比用遍历的方法代码更简洁也更快,此段代码在计算8个数的时候耗时1ms,如果纯使用数组计算的话耗时436ms。HashMap.contatinsKey(value)直接命中的时间复杂度为O(1),最坏的时间复杂度为O(n){遍历红黑树},所以计算此查询最好的时间复杂度为O(n),使用数组遍历时间复杂度为O(N^2/2)。

public class int[] addOfTwo(int [] a,int target) {
    
    HashMap<Integer,Integer> data = new HashMap<Integer,Integer>(a.length);

    for(int i=0;i<a.length;i++) {
        
        if(data.containsKey(target-a[i]) {
            return new int[2] {target-a[i],a[i]};
        }
        data.put(a[i],i);
    }
    return new int[2];
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值