本文总结LeetCode上有关双指针、位运算和分治法的算法题,推荐刷题总数14道。具体考点分析如下图: 一、双指针 1.字符串和数组问题 题号:424. 替换后的最长重复字符,难度中等 题号:828. 独特字符串,难度困难 题号:923. 三数之和的多种可能,难度中等 2.实际场景应用问题 题号:8 ...
分类:
其他好文 时间:
2019-12-22 16:45:47
阅读次数:
103
动态规划 [TOC] 数字三角形问题 LeetCode 120.Triangle 尝试使用分治法 Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent nu ...
分类:
其他好文 时间:
2019-12-22 16:41:16
阅读次数:
132
归并排序的算法是分治法的一个范例 Like QuickSort, Merge Sort is a Divide and Conquer algorithm.它被分成两半,调用自己来分两半,最后归并两半。 merge() 功能用于合并两半。The merge (arr,l,m,r)是关键的处理arr[ ...
分类:
编程语言 时间:
2019-12-19 23:46:00
阅读次数:
160
动态规划之斐波那契数列 动态规划是将一个问题切分成子问题并将子问题的结果存储起来避免重复计算的一种算法。 它有两个要件: 1)重复子问题 2)最优子结构 和分治法一样,动态规划也是有自己的子问题,所以如果没有重复子问题,那么动态规划就无法使用,因为动态规划的作用就是存储重复子问题的值;反例是,二分查 ...
分类:
其他好文 时间:
2019-12-16 13:12:46
阅读次数:
116
动态规划算法与分治法类似,其基本思想是将总问题分解成若干个子问题,先求解子问题,再结合这些子问题的解得到原问题的解。与分治法不同的是,动态规划求解的问题经分解得到的子问题往往不是相互独立的。 基本思想: 将总问题分解成多个子问题(子问题也可以继续分解,直到无法分解),计算子问题,用一个表保存已解决的 ...
分类:
其他好文 时间:
2019-12-15 18:24:59
阅读次数:
109
快速排序属性 上一篇文章介绍了冒泡排序和它的优化。这次介绍的快速排序是冒泡排序演变而来的算法,比冒泡排序要高效的很多。 快速排序之所以快,是因为它使用了分治法。它虽然也是通过不断的比较和移动来实现排序的,只不过它的实现,增大了比较的距离和移动的距离。而冒泡排序只是相邻的比较和交换。 快速排序的思想是 ...
分类:
编程语言 时间:
2019-12-07 19:20:53
阅读次数:
87
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); 自... ...
分类:
编程语言 时间:
2019-12-02 23:44:29
阅读次数:
109
快速排序 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效... ...
分类:
编程语言 时间:
2019-12-02 23:08:44
阅读次数:
88
题目: 给定一个自然数,可以在其前面增加大小不超过它本身一半的数字,形成的新数字属于半数集,这个数本身也属于半数集 例如set(6)={6,16,26,126,36,136} 求n得半数集的元素个数 思路: getset(n)=getset(1)+getset(2)+...+getset(n/2)+ ...
分类:
其他好文 时间:
2019-11-27 19:13:42
阅读次数:
176
概念 快速排序属于交换排序,主要步骤是使用基准元素进行比较,把小于基准元素的移动到一边,大于基准元素的移动到另一边。从而把数组分成两部分,然后再从这两部分中选取出基准元素,重复上面的步骤。过程如下: 紫色:基准元素 绿色:大于基准元素 黄色:小于基准元素 这种思路叫做分治法。 基准元素 基准元素的选 ...
分类:
编程语言 时间:
2019-11-23 12:50:07
阅读次数:
82