算法
文章平均质量分 92
weixin_40241263
这个作者很懒,什么都没留下…
展开
-
基于循环求:n个骰子所有点数之和的概率
static void printProbability(int amount) { if (amount == 0) { return; } int[][] sum = new int[2][amount * 6]; for (int i = 0; i < 6; i++) { ...原创 2020-02-14 15:24:31 · 140 阅读 · 0 评论 -
数组中只出现一次的链各个数字,其他都出现了两次
int[] arr = {2,4,3,6,3,2,5,5}; int result = arr[0]; for (int i = 1; i < arr.length; i++) { result ^= arr[i]; } String s = Integer.toBinaryString(resul...原创 2020-02-13 11:20:04 · 79 阅读 · 0 评论 -
最长不含重复字符的子字符串
public static int getMaxLengthUnRepeatSubString(String str) { // 题目中以假设该字符串只包含a-z的字符,无需安全检查 // 储存每一个字符在字符串str中出现的最新位置 int[] words = new int[26]; for (int i = 0; i < words.length; i++) { ...原创 2019-11-17 21:18:20 · 56 阅读 · 0 评论 -
把数字翻译为字符串(由递归推到动态)
递归这个思路就是分叉,到每一层都至少有一个分叉, 第二个分叉可能会大于25(题目是以0映射字符a),所以需要判断, 代码如下:// static HashMap<Integer, Integer> map = new HashMap<>(); 这里是模仿记忆搜索也算是一种优化方式private static int doTransfer(String s, int ...原创 2019-11-13 23:12:35 · 76 阅读 · 0 评论 -
数字序列中的某一位数字 - java
分析:拆成索引 数 不拆的话一位数字(0-9) 1 * 10个 10个两位数字(10-99 ) 2 * 9 * 10个 90个三位数字(100-999) ...原创 2019-11-09 14:57:46 · 96 阅读 · 0 评论 -
数据流中的中位数
整体思路还是让数组实现排序,只不过是将元素平均分配在一个大根堆和一个小根堆上?原因: 假设数组已经排好顺序(从小到大),将数组均分为两份(left, right, left.length -right.length <=1 ),得到的数组有两个特征:1.left里的元素都比right里的小2. 如果原数组有奇数个元素,那么中位数肯定left里最大的那个,否则的话,就是(max(le...原创 2019-11-06 22:24:44 · 44 阅读 · 0 评论 -
打印数组内出现次数超过数组内元素个数一半的元素
Integer partition(int[] arr, int left, int right) { if ( arr== null || left >= right) { return null; } int index = sort(arr, left, right); if (index >...原创 2019-11-05 14:56:35 · 135 阅读 · 0 评论 -
字符串的排列
每次让当前递归来到的层数的第一个元素与后面的元素进行交换,然后再递归,知道不能递归为止,该题主要是用递归分叉思想 List<String> arrangeStr(String str) { if (null == str || "" == str ) { return null; } List<String...原创 2019-11-03 09:01:19 · 117 阅读 · 0 评论 -
序列化与反序列化二叉树(先序)
序列化格式:子节点为空用特殊符号表示,且节点与节点之间的用都逗号隔开反序列化:递归先处理左右子树,化整为零/** * 序列化 */ public static String serializeTree(Node root) { if (root == null) { return null; } ...原创 2019-11-01 14:28:27 · 81 阅读 · 0 评论 -
二叉搜索树转为双向链表(双向链表节点的魂虚为中序遍历顺序模式)
1.把整体问题划分为局部问题,依据中序遍历模式,让每个节点的left指针为prev指针,right指针为next指针。2.根据推理规律,每个树的根节点的left(prev)为其左孩子的最右节点,right(next)为其右孩子的最左节点。3.根据规律写出递归代码如下: public static void binaryTreeToLinkedList(Node root) { ...原创 2019-11-01 10:53:05 · 61 阅读 · 0 评论 -
剑指offer - 剪绳子 问题的一个细节
public static int getMax(int len) {if (len == 1) {return 0;} if (len == 2) { return 1; } if (len == 3) { return 2; } int[] arr = new int[len + 1]; // 为什么会有这些初始值, 因为能到执行到这里说明 len >...原创 2019-10-22 15:38:14 · 55 阅读 · 0 评论 -
栈的压入,弹出序列java
/** * * 中心思想: 遍历弹出序列, * 每一个都先与两个栈额栈顶元素比较,有的话就弹出,遍历弹出序列的下一个元素 * 没有的话,就让压入序列继续压入help栈,当遇到目标元素时停下,然后越过该元素继续遍历弹出序列, * 如果没遇到该元素说明弹出序列是错的直接返回 */public class Test extends People<Test>{ publi...原创 2019-10-29 09:31:37 · 61 阅读 · 0 评论 -
两个线程交替打印数字和字母
private static Object obj = new Object(); static class T1 implements Runnable { @Override public void run() { synchronized (obj) { for (int i = 1; i < 27; i++) { System.out.p...原创 2019-10-25 19:33:26 · 586 阅读 · 0 评论 -
剑指offer - 输入一个整数,在二叉树中返回路径和为这个整数的所有路径
非递归版 static class Node { int val; Node left; Node right; public Node(int val) { super(); this.val = val; } } public static voi...原创 2019-10-30 23:59:24 · 74 阅读 · 0 评论