算法学习笔记
虽然学过java和Python,但是还是JavaScript比较熟练,因此算法学习全部用JavaScript来写 算法不会被程序语言所限制,也不会一个实现只有一个算法 常见数据结构(数组,列表,映射,堆栈,队列,哈希表,树,图) 算法(排序,双指针,查找,分治,动态规划,递归,回溯,贪心,位运算,DFS,BFS) 大O表示法是专门用来表示算法速度有多快的,不同算法所耗时间的时间增速度不同 一个算法执行的时间和解决问题的规模大小相关 假设一个列表有n个元素,遍历全部元素,要执行n次,大O表示法为O(n) 大O表示法不是表示消耗的时间,而是通过操作元素的次数决定的,一个优秀的算法操作元素次数肯定很少 时间复杂度: O(1): Constant Complexity: Constant 常数复杂度 O(log n): Logarithmic Complexity: 对数复杂度 O(n): Linear Complexity: 线性时间复杂度 O(n^2): N square Complexity 平⽅方 O(n^3): N square Complexity ⽴立⽅方 O(2^n): Exponential Growth 指数 O(n!): Factorial 阶乘 算法的特点:有穷性(必须要在一定的时间内完成,不能无限循环),确定性(每一条指令都有明确的目的,不产生二义性),可行性(可以通过基础运算来实现),输入输出(要有0个或者多个输入,要有1个或者多个输出) 删除有序数组中的重复项 保证有序数组中的元素是不重复的,也就是说不存在重复的元素 有序数组中重复的肯定是挨着的,只需要遍历数组全部的元素,前面和后面进行比较,如果相同则删除后面的 例如: let arr = function(nums) { if(nums == null || nums.length == 0){ return 0 } let b = 0 for(let a=0;a<nums.length;a++){ if(nums[b]!=nums[a]){ nums[++b] = nums[a] } } return ++b } b作为覆盖,a作为查询,当b的值不等于a查询到的值时,b++的值等于a的值,等于的时候b不改变,当不相等再等于到b上...