
排序与查找
排序与查找
小白太白
一起进步,目前所有文章均为免费开放
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
会场安排问题(+排序小结)
会场安排问题(最后有排序小结)时间限制:3000 ms | 内存限制:65535 KB难度:3描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。输入 第一行是一个整型数m...原创 2019-04-09 16:21:22 · 1074 阅读 · 0 评论 -
基本排序算法总结
参考博客:传送门目录各排序时间复杂度冒泡排序选择排序插入排序希尔算法堆排序各排序时间复杂度冒泡排序 /** * 冒泡排序 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 * 针对所有...转载 2019-03-30 17:36:41 · 142 阅读 · 0 评论 -
改进快速排序算法Java版
快速排序【该改进的算法是在本人已有快排算法的基础上改进的:快速排序】(广泛阅读网上资料整理所得,其中重要参考博客:传送门——感谢!)尽管基本的快速排序已经很有用处了,但是有些情况下,基本的快速排序可能会极为低效,比如排序一个大小为N的有序序列,这样所有的划分就会退化,程序会调用自身N次,所以·快速排序最坏情况下使用大约(N^2)/2次比较我们可以对快速排序进行改进,有以下几种方...原创 2019-03-24 17:29:13 · 1644 阅读 · 1 评论 -
【CCF】并查集 - 模板例题
问题描述试题编号: 201412-4试题名称: 最优灌溉时间限制: 1.0s内存限制: 256.0MB问题描述: 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉。 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利用部分麦田作为“中转站”,利用水渠连接不同的麦田,这样只要一片麦田能被灌溉,则与其连接的麦田也能被灌溉。 现在雷雷知道哪些麦田之间可以建设水渠和建设每个水渠所需要的费用(注意不是所有麦田之间都可以建立水原创 2020-12-11 21:21:23 · 199 阅读 · 1 评论 -
循环赛日程表
题目:设有 n = 个运动员要进行羽毛球循环赛,现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其他 n-1 个选手各赛一次。(2)每个选手一天只能比赛一次。(3)循环赛一共需要进行 n-1 天。思路:从两个运动员开始安排日程表,可以直观的看出结果。然后四个运动员的时候,对角安排结果。以此类推。详细解释见代码参考博客:传送门import jav...转载 2019-03-23 11:06:37 · 756 阅读 · 0 评论 -
KMP算法
引用百度百科的介绍思路:由于直接两层循环求子串匹配主串的位置或次数效率特别低,所以我们需要改进算法,如此KMP算法。改进的关键就是当子串与主串不匹配时,可以使主串上的“指针”(代码中是 j )往回回溯距离最小。那么对于nex数组,是记录子串不匹配时需要回溯的位置。同样需要 i ,j 两个“指针”,i 是当前匹配的位置(依次递增至子串遍历结束),j 是记录匹配回溯的位置。j 和 n...原创 2019-03-19 14:53:07 · 246 阅读 · 0 评论 -
顺时针打印矩阵
题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路自己一开始想的思路,依次遍历四个方向的数值。但是后来写乱了,看了别人的思路,发现自己忽略了最后的三种特殊...转载 2019-04-07 17:00:38 · 101 阅读 · 0 评论 -
链表中倒数第k个节点
题目输入一个链表,输出该链表中倒数第k个结点。思路刚开始想的是先遍历一遍得出总节点数,然后算出第k个在正数哪个位置(不放代码了)。后来过了看评论区发现了更好的思路。设置两个标记节点,一个节点 la 先走 k-1 步,这样另一节点 lb 此刻就处于倒数 k 个位置(相对于 la)。所以只要使得 la 节点到最后一个节点,那么 lb 就是绝对的倒数第 k 个节点。/*pub...原创 2019-04-06 17:42:19 · 148 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路根据二叉搜索树的后序序列特点:由于最后一位是根节点,所以当序列不包含根节点时,可将序列分为两部分。一部分是左子树、一部分是右子树。左半部分的值都不大于根节点,右半部分的值都不小于根节点,得到的每个序列同理。public class So...转载 2019-04-05 11:38:19 · 129 阅读 · 0 评论 -
Java自定义类排序
类内排序类内排序采用实现 Comparable 接口的方式(重写 compareTo 方法)规则:与本(或第一个)对象相比,若本(或第一个)对象大于另一个对象则返回1,小于则返回-1,相等则返回0;按此规则排序是升序排序,调换返回值则反向排序。当返回0时按原相对位置排序import java.util.Arrays;public class Solution { stati...原创 2019-07-19 21:37:41 · 582 阅读 · 0 评论 -
按之字形顺序遍历二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路本质也是层序遍历(遍历无需改变,在存值的时候改变顺序即可),只是在奇偶层的顺序发生了变化,可以利用LinkedList双向链表的性质来实现不同方向的添加。奇数层时,正常添加节点遍历;偶数层时,添加新节点需要每次添加到开头,这样取的时...原创 2019-07-14 23:58:37 · 246 阅读 · 0 评论 -
binary-tree-inorder-traversal[中序遍历]
题目描述Given a binary tree, return the inorder traversal of its nodes' values.For example:Given binary tree{1,#,2,3},实例return[1,3,2].思路中序遍历二叉树并用链表保留结果返回。第一种方法是递归;第二种方法是非递归。具体见代码,刚开始非递归没写...原创 2019-07-23 15:02:31 · 99 阅读 · 0 评论 -
binary-tree-postorder-traversal[后序遍历]
题目描述Given a binary tree, return the postorder traversal of its nodes' values.For example:Given binary tree{1,#,2,3},return[3,2,1].Note: Recursive solution is trivial, could you do it iterat...原创 2019-08-04 23:16:35 · 82 阅读 · 0 评论 -
浅谈堆排序
若在输出堆顶元素(即最大值)后,使得剩余n-1个元素的序列重新又成一个堆,则得到n个元素的次大值......如此反复,便能得到一个有序序列,这个过程称之为堆排序。(以大顶堆为例,结果为升序排序)实质上,堆排序就是利用完全二叉树中父节点与孩子节点之间的内在关系来排序的。小根堆:根节点值小于等于左右孩子节点的值,子树亦然。大根堆反之同理。大顶堆->升序【因为排序中是逆序存储,具体见代...原创 2019-08-20 12:58:26 · 150 阅读 · 0 评论 -
二叉树非递归遍历实现
先序遍历/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */import javax.swing.tree.Tree...原创 2019-08-15 23:55:10 · 65 阅读 · 0 评论 -
insertion-sort-list[链表的插入排序]
题目描述Sort a linked list using insertion sort.思路对链表插入排序。定义一个头结点,然后遍历给定的链表依次插入新创建的链表。对于新建立的链表,需要两个变量,一个记录当前比较的最后一个节点,一个记录上一个节点(两节点初始状态在新链表的头结点和第一个节点位置)。比较时从链表头部开始比较(单链表难以从后往前比较)并后移或找到插入位置时退出循环。对...原创 2019-08-17 10:20:26 · 91 阅读 · 0 评论 -
sort-list[链表排序]
Sort a linked list in O(n log n) time using constant space complexity.思路在O(n log n)的时间内使用常数级空间复杂度对链表进行排序。可以采用非递归的归并排序实现。从一开始的单个节点合并(之前需要手动切割为两个指定大小的子链表)到2倍于当前节点的链表合并,在每次增量的循环中,需要记录本增量每次循环之前要切割和合...原创 2019-08-20 15:32:35 · 329 阅读 · 0 评论 -
代码填空:全排列
代码填空:全排列#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N=1e3;char str[N], buf[N]...原创 2020-11-12 13:28:05 · 111 阅读 · 0 评论 -
查找第k小元素——运用快排思想
题目:给定一个乱序的数组,然后查找第 k 小的元素是什么?思路:在这里不讨论其他方法,运用快排的思想来解题。根据快速排序的思想,当我们找到基准值时,便可以确定这个值是位于第几个位置的元素,因此可以利用这一思路找第 k 小元素。在分成的其他两个区间中,用类似二分的方法只找其中一个区间即可。其时间复杂度是O(n)public class findKth { public sta...原创 2019-03-23 09:05:46 · 2422 阅读 · 2 评论 -
快速排序
引用百度百科:思想:简单的说(按从小到大排序示例),就是先找一个基准值(一般是第一个数),设置两个“指针” i 和 j 。j 从数组的最后一位开始往前遍历,当“指针”所指的数小于基准值时,j 不再移动; i 开始从前往后遍历,当 i 所指向的值大于基准值时,交换 i,j 指针所指值,然后再次重复此过程。直到 i == j 的时候,退出循环。此时将基准值与 i,j (i == j)...原创 2019-03-23 08:52:39 · 311 阅读 · 0 评论 -
归并排序
引用百度百科的介绍:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法时间复杂度是O(nlogn)public cl...原创 2019-03-18 16:21:33 · 184 阅读 · 0 评论 -
P1309 瑞士轮
瑞士轮 思路import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); ...原创 2020-11-12 13:30:48 · 137 阅读 · 0 评论 -
最长上升子序列(LIS)
最长上升子序列(LIS)指一个序列中最长的单调递增的子序列。(与子串的差别是子串是连续的,子序列不一定连续,但是相对顺序一致)分析法一:动态规划。状态转移方程为dp[i] = max(dp[i], dp[j] + 1)【注意代码中另一个条件,实际无需处理】边界设置:dp[i] = 1法二:贪心+二分查找定义一个数组存储最长上升子序列,每次使得这个序列(该序列是递增...转载 2019-05-09 20:39:33 · 209 阅读 · 0 评论 -
数组中的逆序对
题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,s...转载 2019-04-15 16:27:18 · 151 阅读 · 0 评论