随笔分类 - 数据结构&算法
摘要:概述 位运算指的是将数据按比特位进行操作,优势在于效率高、耗时少。有些非比特位逻辑场景也可以转变为位运算问题,从而在较低的时间复杂度下实现逻辑,比如查找出现一次的数字、最大单词长度乘积等问题。本文主要总结梳理位运算常见的逻辑技巧以及相应代码并对相关问题进行解析。 基本操作 常用逻辑 判断奇偶数 bo
阅读全文
摘要:概述 二分搜索是常见的搜索算法,能够将有序数组搜索的线性复杂度降低到对数级别。搜索过程每次取搜索区间内的中间元素,如果等于目标元素则直接返回结果;如果大于或小于目标元素,则将搜索区间缩短到对应的一半元素范围,继续搜索,直至搜索区间为空。当然二分搜索不限于找目标值,寻找左侧边界、寻找右侧边界也是常见的
阅读全文
摘要:零、算法概述 1. 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间
阅读全文
摘要:贪心算法是指对子问题取最值,从而求得局部最优解,并以此求得全局最优解。贪心算法可以认为是动态规划的一个特例,同样是需要将问题分解为子问题,避免了子问题的重复计算,只不过在子问题的处理上贪心算法更加简单直接。贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程
阅读全文
摘要:动态规划的思想实质是分治思想和解决冗余,与分治算法类似将原问题分解成若干个子问题,先求解子问题,再从这些子问题的解得到原问题的解。不同于分治算法,经分解的子问题往往不是互相独立的,通过保存已解决的子问题的答案,避免对子问题重复计算、节省时间,也就是解决冗余。 那么动态规划解决的问题是什么样的呢?动态
阅读全文
摘要:回溯算法是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 回溯法解决的问题可以用树结构来描述,每个状态下都对应有n种选择。以全排列问
阅读全文

浙公网安备 33010602011771号