摘要: 八皇后 八皇后问题的描述一般是这样的:每个皇后能够攻击他所在的行、列、以及斜边,在n n的棋盘上如何放置n个皇后让他们不相互攻击? 在解决这个问题之前我们要先了解两个东西: 如何实现排列(这个可以看我之前写的如何 "实现排列和组合" ) 如何解决斜边的标记问题 关于行和列的标记就不多说废话了.直接来 阅读全文
posted @ 2020-03-10 22:32 continued258 阅读(137) 评论(0) 推荐(0)
摘要: List 继承接口: Collection 常见实现类: AbstractList(其常见子类ArrayList LinkedList Vector) 常见方法: add() remove() clear() get() contains() size() 可重复 有序 Vector Vector线 阅读全文
posted @ 2020-03-10 21:35 continued258 阅读(110) 评论(0) 推荐(0)
摘要: 排列 用程序实现排列可以说是暴力求解的基础,也可以说是DFS. 说一下简单的思路: 首先排列就是把一列数按照不同的顺序列出来.所以根据这个要求我们知道,每个数在一种排列中只能使用一次,我们需要想办法把已经使用的数标记出来防止它重复使用. 然后,实现若干个数排列怎么实现若干个数的循环访问?用for循环 阅读全文
posted @ 2020-03-15 22:42 continued258 阅读(127) 评论(0) 推荐(0)
摘要: 0/1背包 首先来讲下什么事0/1背包问题,一般都是这样的:有一堆物品,每个物品有重量和价值两个属性,同时有一个背包可以装一定重量的物品,在背包不超重的情况下往背包里装物品,最多能装价值多少的物品. 之所以叫0/1背包是因为每种物品只有一个,只能选择放或者不放. 1.二维数组形式的解法 思想大致是这 阅读全文
posted @ 2020-03-15 21:46 continued258 阅读(159) 评论(0) 推荐(0)
摘要: 此算法的思想就是遍历数据,第i个数据与随机一个位置的数据交换.最终的数据就是一个打乱顺序的数据. 这种算法应用很广,我常见的场景是在算法比赛中有些测试点会恶意卡时间复杂度. 比如你用快排,有一些测试点会把时间卡到最坏时间复杂度O(n^2),和平均O(nlnn)相差很多,这时候就需要随机化算法了,先把 阅读全文
posted @ 2020-03-12 01:17 continued258 阅读(169) 评论(0) 推荐(0)
摘要: ``` 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) 阅读全文
posted @ 2020-03-12 01:14 continued258 阅读(331) 评论(0) 推荐(0)
摘要: 单例 1.饿汉式: 基于classloder的机制解决的重复创建的问题,但是如果一个虚拟机里有多个classloder的话可能会创建出多个实例. 2.懒汉式 在多线程中可以很好的工作,但是在99%的使用场景长不需要同步. 3.枚举 不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象. 4 阅读全文
posted @ 2020-03-10 23:02 continued258 阅读(110) 评论(0) 推荐(0)
摘要: 模拟了一下数据量:一共100000行数据,每行100个,一共一千万的数据. 使用scanner的next()读取耗时2500ms左右,这个数据量并不算很夸张,的确有些题的数据量能到这个层次. 使用了这个输入优化后读取耗时400ms左右,这个速度在数据量大的时候可以说是至关重要. 阅读全文
posted @ 2020-03-10 22:48 continued258 阅读(113) 评论(0) 推荐(0)
摘要: 首先来明确一下概念,并查集是一种树,主要操作是合并两个集合 以及查询两个结点是否在一个集合中. 虽然这么说但是我总是觉得这是种很奇葩的树. 路径压缩好的并查集的树一般长这样: 对没错就是这样,我没有恶搞,中间是父节点,一圈都是子结点. 这样查询的时候很容易就能判断两个结点是否在一个集合中了(如果两个 阅读全文
posted @ 2020-03-10 22:42 continued258 阅读(185) 评论(0) 推荐(0)
摘要: ```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; ... 阅读全文
posted @ 2020-03-10 22:40 continued258 阅读(123) 评论(0) 推荐(0)
摘要: 归并排序(计算逆序对) 阅读全文
posted @ 2020-03-10 22:33 continued258 阅读(99) 评论(0) 推荐(0)