动态规划学习心得 说实话吧,动态规划(DP)确实是一个比较难的知识点,对于初学者来说,是一个难过的坎(笔者的脸呢?开玩笑。)。动态规划就是我从初学开始遇到的最神奇的解法,它不同于暴力搜索,也不同于一般的贪心,能够以出乎人意料的时间复杂度(近似于O(n^2))解决一些难题,算法远远优于一般的深搜(O( ...
分类:
其他好文 时间:
2019-04-09 20:22:58
阅读次数:
151
在上一篇中,回顾了一下针对选择排序的优化算法——堆排序。堆排序的时间复杂度为O(n logn),而快速排序的时间复杂度也是O(n logn)。但是快速排序在同为O(n logn)的排序算法中,效率也是相对较高的,而且快速排序使用了算法中一个十分经典的思想——分治法;因此掌握快速排序还是很有必要的。 ...
分类:
编程语言 时间:
2019-04-06 14:00:47
阅读次数:
163
分治法:将一个复杂的一分为二,然后对这两部分递归调用该函数,直到找到函数出口,求解出最简单的情况 需要注意的是分治时开始和结束位置参数的选择,一开始写的是s到mid-1,另一个是mid到e,然后就会数组为奇数个时结果对,为偶数个时结果错,后面改为s到mid,另一个是mid+1到e 结果就对了。 ...
分类:
编程语言 时间:
2019-03-24 19:55:19
阅读次数:
147
问题:https://leetcode-cn.com/problems/search-a-2d-matrix-ii/ GitHub实现:https://github.com/JonathanZxxxx/LeetCode/blob/master/SearchMatrixClass.cs 思路:二分查找 ...
原理 将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得 ...
分类:
编程语言 时间:
2019-03-16 18:06:48
阅读次数:
201
一:定义 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 二:解 ...
分类:
编程语言 时间:
2019-03-03 14:47:49
阅读次数:
199
1.一些逻辑比较复杂的题用离散数学来撸逻辑,逻辑就会很清楚了,就不会有错 2.经典算法问题 - 最大连续子数列和 https://www.cnblogs.com/conw/p/5896155.html 1.暴力法 复杂度O(N^3)。假设数组长度为N。因为有3个嵌套的循环,每个循环最大可能次数与n的 ...
分类:
编程语言 时间:
2019-02-28 21:35:16
阅读次数:
278
// test.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; void reverse(char a[], int low, int high) { int i = low, j =... ...
分类:
其他好文 时间:
2019-02-28 18:28:00
阅读次数:
183
// test.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; int sum; int *b; void merge_sort(int a[], int low, int high)... ...
分类:
其他好文 时间:
2019-02-28 18:22:24
阅读次数:
158
// test.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; //求每一位总和 int BinSearch(int a[], int low, int high, int k) { ... ...
分类:
其他好文 时间:
2019-02-28 14:33:22
阅读次数:
142