随笔分类 - 算法
摘要:快速排序 快速排序的大致思想是:对于一个组数据,先选出一个标识位,把比这个标识数据小的数据全部放在标识位前,其他的比标志数据大的放在标识位后面;然后不断重复这个过程同时缩小范围,最终数据就是一组有序的数据. 快速排序的范围变化和归并排序很像,只是归并是由小到大不断合并,快排是由大到小不断分割. 同样
阅读全文
摘要:归并排序 归并排序的大致思想就是:先把数据划分成若干个有序的数组,把两个有序的数组和合并成一个数组,直到合并成一个数组. 所以实现过程就分为两个部分: 把一个乱序的数组划分成若干个有序的数组.(这个很简单,每个数组里都只有一个数,不就是有序的吗?) 把这些数组不断合并直到合并成一个有序的数组 划分成
阅读全文
摘要:排列 用程序实现排列可以说是暴力求解的基础,也可以说是DFS. 说一下简单的思路: 首先排列就是把一列数按照不同的顺序列出来.所以根据这个要求我们知道,每个数在一种排列中只能使用一次,我们需要想办法把已经使用的数标记出来防止它重复使用. 然后,实现若干个数排列怎么实现若干个数的循环访问?用for循环
阅读全文
摘要:0/1背包 首先来讲下什么事0/1背包问题,一般都是这样的:有一堆物品,每个物品有重量和价值两个属性,同时有一个背包可以装一定重量的物品,在背包不超重的情况下往背包里装物品,最多能装价值多少的物品. 之所以叫0/1背包是因为每种物品只有一个,只能选择放或者不放. 1.二维数组形式的解法 思想大致是这
阅读全文
摘要:``` public class Rand { private double seed; public Rand() { seed = System.currentTimeMillis(); } public Rand(double seed) { this.seed = seed; } private double random() { seed = (seed * 9301 + 49297)
阅读全文
摘要:模拟了一下数据量:一共100000行数据,每行100个,一共一千万的数据. 使用scanner的next()读取耗时2500ms左右,这个数据量并不算很夸张,的确有些题的数据量能到这个层次. 使用了这个输入优化后读取耗时400ms左右,这个速度在数据量大的时候可以说是至关重要.
阅读全文
摘要:首先来明确一下概念,并查集是一种树,主要操作是合并两个集合 以及查询两个结点是否在一个集合中. 虽然这么说但是我总是觉得这是种很奇葩的树. 路径压缩好的并查集的树一般长这样: 对没错就是这样,我没有恶搞,中间是父节点,一圈都是子结点. 这样查询的时候很容易就能判断两个结点是否在一个集合中了(如果两个
阅读全文
摘要:```import java.util.ArrayList;import java.util.Scanner;/** *嵌套矩形 */public class DAG01 { static Scanner scan = new Scanner(System.in); static int n, ans = 1; static int[] dp; static boolean[][] graph; ...
阅读全文
摘要:八皇后 八皇后问题的描述一般是这样的:每个皇后能够攻击他所在的行、列、以及斜边,在n n的棋盘上如何放置n个皇后让他们不相互攻击? 在解决这个问题之前我们要先了解两个东西: 如何实现排列(这个可以看我之前写的如何 "实现排列和组合" ) 如何解决斜边的标记问题 关于行和列的标记就不多说废话了.直接来
阅读全文
摘要:二分查找 俗话说十个二分九个错,我基本上都是事先写好背下来了. 临时写的二分基本上都是有bug的,除非你在二分到区间是个位数的时候不使用二分直接顺序比较,这样可以有效避免写bug.
阅读全文
摘要:package test01; public class task06 { static int[] data = new int[11]; static boolean check() { if (check2() && check3() && check4() && check5() && ch
阅读全文

浙公网安备 33010602011771号