例题: LeetCode 5 最长回文子串 LeetCode 516 最长回文子序列 Acwing 石子归并 最长回文子串: 定义状态dp[i][j]表示区间i~j是一段回文串,如果dp[i][j]是回文串的话,s[i]=s[j]并且dp[i-1][j-1](i != j)是个回文串,所以说转台转移 ...
分类:
其他好文 时间:
2020-05-16 12:46:12
阅读次数:
50
[TOC] 归并排序思路 1)找到单链表中间节点,从而将原链表分为左右两部分; 2)对左右两部分链表分别进行归并排序,并合并左右两部分; 3)分别对两部分重复上述操作,直到所有元素都已排序成功。 因为单链表只能从链表头节点向后遍历,第一步操作用快慢指针找链表中点的时间复杂度就为O(n)。由于之后都是 ...
分类:
编程语言 时间:
2020-05-16 00:44:59
阅读次数:
82
题意 :有一个长度为$n$元素均为$0$的序列,进行$n$次操作构造出一个新序列$a$:每次选择最长的连续为$0$的区间$[l,r]$,使得第$i$次操作时,$a[\frac{l+r}{2}]=i$(下取整),求$a$. 题解 :刚开始我打算用归并分治的思想来写,但是发现左区间递归不到,然后就gg了 ...
分类:
其他好文 时间:
2020-05-15 19:56:45
阅读次数:
61
归并排序 利用归并的思想实现的排序方法 二路归并排序原理 假设初始序列有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1 然后两两归并,得到┌n/2┐个长度为2或1的有序子序列;再次两两归并,... 如此重复,直到得到一个长度为n的有序序列为止 1 #include <stdio.h> 2 ...
分类:
编程语言 时间:
2020-05-15 13:15:47
阅读次数:
52
博客:https://www.cnblogs.com/chengxiao/p/6194356.html https://www.cnblogs.com/piperck/p/6030122.html python实现: def merge(left, right): """ params: left= ...
分类:
编程语言 时间:
2020-05-14 09:11:45
阅读次数:
64
采用分治思想,分治其实也是一种递归,递归的三个条件:递推公式,终止条件,递归代码实现 package dsaa.归并排序; import java.util.Arrays; /* * 归并排序 * */ public class MergeSortSolution { public static i ...
分类:
编程语言 时间:
2020-05-13 23:29:28
阅读次数:
68
解决实际问题 第一步: 理解 先讲出来, 画图 第二步:计划 计划很重要,最好写出来; 第三步:分解 分治算法(把复杂的大问题分解成很多小问题) 任务->子任务->结果归并 第四步: 卡壳 重复看问题,站到旁观者看问题,请教同事; 最后:练习 ...
分类:
其他好文 时间:
2020-05-12 13:47:54
阅读次数:
49
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 来源:力扣(LeetCode) 需要从尾开始遍历,否则在 nums1 上归并得到的值会覆盖还未进行归并比较的值。 class Solution { public: voi ...
分类:
编程语言 时间:
2020-05-12 11:28:32
阅读次数:
77
1 void quick_sort(int q[], int l, int r) 2 { 3 if (l >= r) return; 4 5 int i = l - 1, j = r + 1, x = q[l + r >> 1]; 6 while (i < j) 7 { 8 do i ++ ; wh ...
分类:
编程语言 时间:
2020-05-12 00:03:55
阅读次数:
84
一、什么是归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二、图解先将无序数组分割,经过排序,将两个有序数组再拼接。三、原理归并排序的原理就是合并两个有序数组。合
分类:
编程语言 时间:
2020-05-11 23:19:11
阅读次数:
67