思路,将一个数组不断拆分,拆到一个元素之后,倒过来一步步排好序,获得新的数组 [55,23,66,905,56,85,356,30,57,34,832,230] left=[55,23,66,905,56,85] right=[356,30,57,34,832,230] left可以看成一个新数组, ...
分类:
编程语言 时间:
2020-05-18 18:18:53
阅读次数:
64
## java最新面试题2020# 一面 1. 手撕twosum代码,手撕归并排序,还有一个题忘了,我记得是用hashmap做2. 讲一下Java垃圾回收分代回收各种算法3. Java内存结构4. Java堆存哪些数据5. 讲一下四种引用6. Java语言的特性7. 抽象,多态8. 项目中一个模块具... ...
分类:
编程语言 时间:
2020-05-18 14:08:18
阅读次数:
147
快速排序 时间复杂度:O(nlogn) def partition(li, left, right): tmp = li[left] while left < right: while left < right and li[right] >= tmp: # 从右边找比tmp小的数 right -= ...
分类:
编程语言 时间:
2020-05-17 17:45:40
阅读次数:
64
一、归并排序 先通过递归将列表元素分开,然后通过合并比较大小进行排序。 二、上代码 def merge(li, low, mid, high): """ 归并排序 :param li:参数列表 :param low: 列表最左边 :param mid: 列表中间的 :param high: 列表最右 ...
分类:
编程语言 时间:
2020-05-17 13:31:42
阅读次数:
83
例题: 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