算法
Bob丶抱抱
爱工作,爱生活
展开
-
算法系列--哈希表
哈希表 哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。 经典例题 遍历数组中每个元素,统计比它小的元素的个数 leetcode 1365 示例:nums[1,2,3,2,1,4], 每个元素小的数组[0,2,4,5], 所以返回[0,2,4,2,0,5] 解题思路 第一种思路,是排序后, 然后原创 2020-12-03 17:12:46 · 281 阅读 · 0 评论 -
算法系列--二分查找
二分查找是一种效率较高的查找方法,前提是数据结构必须先排好序,它的平均时间复杂度是O(logn)。碰到排好序的数组,第一时间应该想到用二分法求解。 二分查找的递归与非递归实现 在有序数组arr中,查找目标值value的元素下标 // 递归 function biSearch(arr, start, end, value) { if (start > end) return -1 let mid = Math.floor((start + end) / 2) if (arr[mid].原创 2020-11-12 16:48:17 · 192 阅读 · 0 评论 -
算法系列--排序
根据时间复杂度分类,常见的排序算法有: O(n^2): 冒泡、插入、选择; O(nlogn): 快排、归并; O(n): 桶、计数、基数; 冒泡排序 时间复杂度: 平均O(n^2) 稳定性: 稳定 // 普通版 function bubbleSort(arr) { let n = arr.length for (let i = 0; i < n; i++) { for (let j = 0; j < n - i - 1; j++) { if (arr[j] &原创 2020-11-06 11:52:40 · 225 阅读 · 0 评论 -
算法系列--递归
什么类型的问题适合递归求解 一个问题可以分解为几个子问题; 子问题与父问题求解方法一样; 存在递归终止条件; 如何编码递归问题 写出递推公式; 写出终止条件; 翻译成代码; 递归代码弊端及解决方法 堆栈溢出:通过控制递归深度; 重复计算:通过散列表存储计算值; 函数调用耗时多:通过控制递归深度; 空间复杂度高:转成非递归; 经典习题 LeetCode 70 爬楼梯:一次可以爬1层或者2层,问爬到n层有多少种方法; 分析 递推公式:爬到最后一层楼梯只有两种可能,从倒数第二层走一步,或者从倒数第原创 2020-10-23 18:47:58 · 136 阅读 · 0 评论 -
算法系列--基础知识
基础定义 数据结构与算法区别 数据结构:一组数据的存储结构; 算法:操作数据的一组方法; 时间复杂度 表示算法的执行时间与数据规模之间的增长关系; 只关注循环执行次数最多的代码,这段代码执行次数 n 的量级; 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积; 常见时间复杂度 多项式量级:O(1), O(logn), O(n), O(nlogn), O(n^k) 非多项式量级:O(2^n)、O(n!) 空间复杂度 表示算法的存储空间与数据规模之间的增长关系; 常见空间复杂度 O(1)原创 2020-10-26 17:44:48 · 105 阅读 · 0 评论