双层循环遍历 减少时间复杂度

  • 哈希表

双层for循环,时间复杂度O(n2),空间复杂度O(1),往往会带来很大的时间开销,尤其是当数组长度比较大时,很容易造成程序卡顿。接下来的方法可以用空间复杂度换时间复杂度:

哈希表

哈希表为无序Map,插入、查找、删除的时间复杂度均为O(1)
例如:

给定一个整数数组 nums 和一个目标值 target,找出和为目标值的那 两个 整数,并返回他们的数组下标

//传统:双层for循环遍历
for(i=0;i<nums.length-1;i++){for(k=i+1;k<nums.length;k++){if((nums[i]+nums[k])==target) return [i,k];}}
//HashMap
let hashMap = {};for(i=0;i<nums.length;i++){if(hashMap.hasOwnProperty(target - nums[i])){  //如果map中有符合条件的 输出return [hashMap[target - nums[i]],i];}else {hashMap[nums[i]]=i;}}
throw new Error('Whoops!');    //循环完成,抛出异常
算法 运行时间 内存消耗
HashMap 944ms 52.2MB

另,对于javascript来说,还有一种更省时间的方式:数组存储。

let list = [];for(i=0; i<nums.length; i++){let index = target - nums[i];if(list[index] != null){return [list[index],i];}else{list[nums[i]] = i;}}
算法 运行时间 内存消耗
List 148ms 46.8MB

双层循环遍历 减少时间复杂度相关推荐

  1. python list 删除元素_Python的list循环遍历中,删除数据的正确方法

    初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5]print(num_list)for i ...

  2. 数组常见的遍历循环方法、数组的循环遍历的效率对比

    1 遍历数组的方法 1-1.for / while 最普通的循环 效率最高 兼容ie6 tips:for循环更适用于循环的开始和结束已知,循环次数固定的场合:while循环更适合于条件不确定的场合 1 ...

  3. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  4. python list遍历删除_Python中list循环遍历删除数据的正确方法

    前言 初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) f ...

  5. Objective-C 高性能的循环遍历 forin - NSEnumerator - 枚举 优化

    Cocoa编程的一个通常的任务是要去循环遍历一个对象的集合  (例如,一个 NSArray, NSSet 或者是 NSDictionary). 这个看似简单的问题有广泛数量的解决方案,它们中的许多不乏 ...

  6. linux获取连续数组下标值,shell 数组,双层循环打印变量

    双层循环,打印循环执行次数. 特别注意 ,shell 脚本赋值时 '=' 两侧不能有空格,否则报错,shell command not found 但在if 语句中需要有: STR1="ab ...

  7. java批量导入和批量删除_MyBatis 实现批量插入和删除中双层循环的写法案例

    本博客主要用两个例子来说明一下批量删除和批量插入双层循环的用法,顺便自己记录一下,方便以后使用. 1.批量删除 (1):dao中的写法: public int batchDelPrice(@Param ...

  8. 使用“ for”循环遍历字典

    以下代码使我有些困惑: d = {'x': 1, 'y': 2, 'z': 3} for key in d:print key, 'corresponds to', d[key] 我不明白的是key部 ...

  9. 使用“for”循环遍历字典

    问题描述: d = {'x': 1, 'y': 2, 'z': 3}for key in d:print(key, 'corresponds to', d[key]) Python 如何识别它只需要从 ...

最新文章

  1. 用XInput库使用xbox360手柄
  2. iOS Xcode4.2代码管理工具的使用
  3. log4j与commons-logging,slf4j的关系
  4. Java多线程:易失性变量,事前关联和内存一致性
  5. 2021计算机应用基础形考答案模块2,国家开放大学计算机应用基础模块2形考答案-20210603091431.docx-原创力文档...
  6. php引用其他接口,PHP 接口与接口的引用
  7. SpringBoot学习(四)
  8. BZOJ5221[Lydsy2017省队十连测] 偏题
  9. python对txt文件处理_python 数据处理 对txt文件进行数据处理
  10. java 多音词语转拼音_一种多音字汉字转拼音全拼的方法与流程
  11. 【软件定义汽车】AUTOSAR架构介绍
  12. matlab虚拟示波器,虚拟示波器是什么_虚拟示波器详解
  13. python数值互换_python值交换
  14. 计算机图形学之二维平移旋转缩放代码
  15. 算法笔记.胡凡 第四章 算法初步
  16. windows11微软官方安装介质制作
  17. 开启编程世界的临门一脚
  18. Electropure EDI 中国区2019年年度总结会议
  19. 【Redis数据结构篇】- SDS
  20. 国内航班最快明年可实现上网打电话

热门文章

  1. SMETA认证咨询,SEDEX/SMETA验厂审核分为几类及验厂周期
  2. SMETA认证辅导,SMATA验厂审核现场会查验哪些文件
  3. Windows常用bat脚本打开目录或文件
  4. AWS CloudFormation
  5. Java 8新特性(三):Optional类
  6. 如何设计动态股权分配方案
  7. 智能工厂:怎样服装ERP软件的价格距离这么大?
  8. 墨言教育:看过很多配色理论还是学不会?来看这里!
  9. 全网最通俗的条件随机场CRF
  10. Chromium源码目录结构简介