javascript-算法基础-01

news2024/10/7 7:24:43
  1. 时间复杂度 O(1) O(n) O(n²) O(2ⁿ)

记得有次面试, 让我求1 + … n, 我说用for循环. 当时竟然都忘了等差数列公式了…

一个简单的求和

let res = 0                       // 1
for(let i; i < arr.length; i++){  // 1
	res += arr[i]                 // n
}

let res = 0
for(const item of number){   比上面的更简洁, 但似乎不能break
	res += item
}
num.reduce((a, b) => a + b) 归并,当时时间复杂度并没有降低

2*n => n


  1. what & why
  2. Examples & Different Algorithms
  3. Different Solution Approaches: Recursion, , Greedy Algorithms (how to tackle and solve problems)

Basics & Time Complexity 基础 和 时间复杂度

Math Algorithms 数学算法

Recursion & Dynamic Programming 递归和动态编程

Search Algorithms 搜索算法

Sorting Algorithms 排序

Space Complexity

Sets(Arrays) Algorithms

More Complex Algorithms & A Blueprint

leetcode 509 斐波那契数列

解法1, 递归, 最简单, 性能最差

O(2²)
function fib(n) {
	if (n < 2) {
    	return n
  	}
  	return fib(n - 1) + fib(n - 2)
}

解法2 递归 + 数组记录, O(n) Bottom-up Approach

let arr = [0, 1, 1] 
function getFib(n) {
    if (n <= 2) return arr[n]
    return arr[n] = getFib(n - 1) + getFib(n- 2)
}

console.log(getFib(20))

在这里插入图片描述

感觉这种是最好理解的

var fib = function (n) {
  let arr = [0, 1, 1]
  for(let i = 3; i <= n; i++){
    arr[i] = arr[i - 1] + arr[i - 2]
  }
  return arr[n]
};

不用数组, 用变量倒

let fib = function (n) {
    let arr = [0, 1, 1]
    if (n < 2) return arr[n]
    // 分别代表 dp[i - 1] 和 dp[i - 2]
    let dp_i_1 = 1, dp_i_2 = 0
    for (let i = 2; i <= n; i++) {
        // dp[i] = dp[i - 1] + dp[i - 2];
        const dp_i = dp_i_1 + dp_i_2
        dp_i_2 = dp_i_1
        dp_i_1 = dp_i
    }
    return dp_i_1

};

leetcode 866. 回文素数

素数

var primePalindrome = function(n) {
    if(n === 1) return 2
    let max = 12 * Math.pow(10,8)
    for(let i = n; i < max; i++) {
        if(isH(i) && isPrime(i)) {
            return i
        }
    }
	
	// 判断是不是素数
    function isPrime(v){
        for(let i = 2; i <= Math.sqrt(v); i ++){
            if(v % i === 0){
                return false
            }
        }
        return true
    }
     function isPalindrome(v) {
        let str = String(v)
        let l = 0,
          r = str.length - 1
        while (l < r) {
          if (str[l] !== str[r]) return false
          l++
          r--
        }
        return true
      }
};
卡在了 9989900 超时了....
Math.min(1,2,3)
Math.max(1,2,3)

leetcode 231. 2的幂 isPowerOfTwo

  1. & 是全 1 才为 1
  2. 5 & 12 => 4
    0101 => 5
    1100 => 12
    0100 => 4
一个数如果是 2 的指数,那么它的二进制表示一定只含有一个 1。

位运算 n&(n-1) 在算法中挺常见的,作用是消除二进制表示中的最后一个 1,可以判断 2 的指数。
/**
 * @param {number} n
 * @return {boolean}
 */
var isPowerOfTwo = function(n) {
    if(n < 1) return false
    return (n & (n - 1)) == 0;
};
var isPowerOfTwo = function(n) {
    let divide = n
    while(divide !== 1) {
        if(divide %2 !== 0) return  false
        divide = divide / 2
    }
    return true
};

阶乘 54321

recurive 递归写法 O(n)
function factorail() {
	if(number === 1) {
		return 1
	}
	return number * factorial(number - 1)
}
performance.now()

参考

bilibili视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/476820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

肝一肝设计模式【四】-- 建造者模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 文章目录 系列文章目录前言一、什么是建造者模式二、举个栗子三、静态内部类写法四、开源框…

Golang-常见数据结构Map

Map map 是一种特殊的数据结构&#xff1a;一种元素对&#xff08;pair&#xff09;的无序集合&#xff0c;pair 的一个元素是 key&#xff0c;对应的另一个元素是 value&#xff0c;所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构&#xff1a;给定 key&…

5 款 AI 老照片修复工具的横向比较

在大语言模型和各类 AI 应用日新月异的今天&#xff0c;我终于下定决心&#xff0c;趁着老照片们还没有完全发黄褪色、受潮粘连抑或损坏遗失&#xff0c;将上一代人实体相册里的纸质胶卷照片全部数字化&#xff0c;并进行一次彻底的 AI 修复&#xff0c;好让这些珍贵的记忆能更…

宽带IPTV单线复用

宽带IPTV单线复用 中国联通类&#xff1a; 1、前言 为了解决家里电视墙只预留了一个网口&#xff0c;IPTV无法与路由器共存的问题。 网络环境&#xff1a;中国联通 作者使用的路由器&#xff1a;云易家AX18C 2、光猫获取超管密码 黑龙江&#xff1a;hljcuadmin 重庆&…

HTML基础 + 实例解析

我们的目标: 认识HTML语言学会常用的HTML标签 目录 HTML的框架结构 HTML常见标签使用 1.注释标签 2. 标题标签 3. 段落标签 4. 换行标签 5. 格式化标签 6. 图片标签 7. 超链接标签 8. 表格标签 9. 表格标签-单元格合并 10. 列表标签 无序列表标签 有序标签 11. 表单标签 inp…

将 Quicker 搜索功能打造成专属于你的 Windows 启动器

在 macOS 平台上&#xff0c;有许多优秀的启动器&#xff0c;如老牌双雄 Alfred、Launchbar 和新秀 Raycast。反观 Windows 平台&#xff0c;则有 uTools、Listary、Wox 等应用&#xff0c;它们在基础功能上表现不错&#xff0c;但受限于应用生态&#xff0c;可拓展性都较弱。Q…

Java——Java面向对象

该系列博文会告诉你如何从入门到进阶&#xff0c;一步步地学习Java基础知识&#xff0c;并上手进行实战&#xff0c;接着了解每个Java知识点背后的实现原理&#xff0c;更完整地了解整个Java技术体系&#xff0c;形成自己的知识框架。 概述&#xff1a; Java是面向对象的程序…

【C++】类与对象(1)

【C】类与对象&#xff08;1&#xff09; 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2023.4.29 本篇博客是有关C类与对象的知识&#xff0c;学习了类与对象就相当于一只脚踏进了C的大门&#xff0c;本篇博客会深入讲解C中的类与对象&#xff08;重点为this指针&#xff…

C++知识点 -- 异常

C知识点 – 异常 文章目录 C知识点 -- 异常一、异常概念二、异常的使用1.异常的抛出和捕获2.异常的重新抛出3.异常安全4.异常规范 三、自定义异常体系四、C标准库的异常体系五、C异常的优缺点 一、异常概念 当一个函数发现自己无法处理错误时&#xff0c;就可以抛出异常&#…

Python超矩形

文章目录 距离函数矩形分割 Rectangle是 scipy.spatial中封装的类&#xff0c;其构造函数只需输入最小值和最大值的数组即可&#xff0c;并且可通过内置的 volume方法计算广义的体积。 from scipy.spatial import Rectanglerec Rectangle((0,0), (5,5)) print(rec.maxes) …

java-会话技术

1.1 会话管理概述 1.1.1 什么是会话 这里的会话&#xff0c;指的是web开发中的一次通话过程&#xff0c;当打开浏览器&#xff0c;访问网站地址后&#xff0c;会话开始&#xff0c;当关闭浏览器&#xff08;或者到了过期时间&#xff09;&#xff0c;会话结束。 举个例子&am…

py_rabbitmq

安装 服务端 https://www.jianshu.com/p/2fb6d5ac17b9 客户端 pip install pika文档 https://rabbitmq.com/tutorials/tutorial-one-python.html 简单示例 生产者 import pika import rabbitmq_study.settings as settingscredentials pika.PlainCredentials(settings…

Python每日一练(20230430)

目录 1. 移除元素 &#x1f31f; 2. 删除排序链表中的重复元素 &#x1f31f; 3. 搜索旋转排序数组 II &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1.…

总结836

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 暴力英语&#xff1a;背诵《keep your direction》&#xff0c;默写&#xff0c;英语语法 高等数学&#xff1a;刷题&a…

node笔记_安装nvm管理node版本

文章目录 前言下载nvm安装nvmnvm路径node路径查看版本nvm -v查看nvm的node版本列表&#xff08;nvm list available&#xff09;配置nvm的镜像库mirror选择node版本安装 (node install version)使用指定的node版本&#xff08;nvm use&#xff09; node环境变量配置配置NODE_PA…

【打卡】图像检索与匹配4 孪生网络

任务4&#xff1a;孪生网络 孪生网络是一种由两个相同结构的神经网络组成的模型&#xff0c;其目的是将两个输入数据映射到一个共同的向量空间中&#xff0c;并计算它们之间的相似度或距离。它通常用于图像匹配、人脸识别、语义匹配等任务中。 步骤1&#xff1a;构建三元组数…

MIT 6.824 lab4A总结

Background 一个raft集群的性能很明显和raft的数量有关系&#xff0c;更重要的是如果我们多个key放在一个raft集群里&#xff0c;这样的并行性不太好。所以我们可以考虑分片&#xff0c;利用操作潜在的并行性来提升性能。每一个副本组只管理几个分片的put和get&#xff0c;并且…

网络基础设施 拥塞控制

我经常说&#xff0c;传统的 TCP 优化已经到顶&#xff0c;不会有大意义了&#xff0c;这有两方面意思。 一方面&#xff0c;内在的&#xff0c;TCP 的 ACK 时钟带回的信息就那么多&#xff0c;用足了又能怎样。一个学习最差的差生能控制的分数是是 0&#xff5e;100 分的区间…

【Linux】基础IO——文件系统|软硬链接|动静态库

文章目录 一、磁盘1. 物理结构2. 存储结构3. 逻辑抽象结构 二、文件系统1. 文件系统的结构2. 查看文件3. 删除文件 三、软硬链接1. 软链接2. 硬链接3. ACM 时间 四、动静态库1. 动静态库的介绍2. 静态库的制作3. 动态库的制作4. 动态库的加载 一、磁盘 基于上篇博客所写到的文…

从0搭建Vue3组件库(十一): 集成项目的编程规范工具链(ESlint+Prettier+Stylelint)

欲先善其事,必先利其器。一个好的项目是必须要有一个统一的规范,比如代码规范,样式规范以及代码提交规范等。统一的代码规范旨在增强团队开发协作、提高代码质量和打造开发基石,所以每个人必须严格遵守。 本篇文章将引入 ESLintPrettierStylelint 来对代码规范化。 ESlint ES…