随笔分类 -  算法刷题

记录算法学习过程
摘要:以上是一种常规思路,要掌握。下面是一种递归方法。 //当深度增加的时候,如果当前list中的ArrayList<Integer>>(存每层数)不够,则增加一个新的存, //如果够了,就接着存进最新的哪个ArrayList<Integer>>即可。比如第三层,四个数都存在第三个 //ArrayList 阅读全文
posted @ 2019-08-13 10:44 路在脚下丶 阅读(632) 评论(0) 推荐(0) 编辑
摘要:import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ /* 从返回值... 阅读全文
posted @ 2019-08-13 10:02 路在脚下丶 阅读(307) 评论(0) 推荐(0) 编辑
摘要:提示:在算法处理过程中,未必就要将出现在前面的作为关键字检索。比如本题,非得先去检索范围,再去判断范围中key的个数。反其道而行,把输入的数字当作关键字,组成Map 阅读全文
posted @ 2019-07-29 09:01 路在脚下丶 阅读(443) 评论(0) 推荐(0) 编辑
摘要:显然最长公共子序列不一定需要连续的,只要字符的顺序严格递增即可。最长公共字串需要字符连续 子序列代码: 最长公共字串代码 仔细比对两处代码可知,公共子序列需要将每一次循环中记录子序列的结果,dp的值一直更新(虽然值有可能不变)。而公共字串只有当字符连续的时候,dp值才会发生更新。 公共子序列在输出结 阅读全文
posted @ 2019-07-28 18:30 路在脚下丶 阅读(168) 评论(0) 推荐(0) 编辑
摘要:本题来自牛客网,网易一道算法题。 参考一位大神的C++算法,改成Java写的。主要思想是动态规划。分析最优子结构可知,当工作量 s+1 时,这个1的工作量必须由后面的3个人做。那么就有2^3 -1 种可能(可以一个人做,可以两个人,可以三个人同时做),所以就有了这么多if语句,当然,不能一个人都不做 阅读全文
posted @ 2019-07-26 10:10 路在脚下丶 阅读(359) 评论(0) 推荐(0) 编辑
摘要:import java.util.*; public class Solution { public ArrayList GetLeastNumbers_Solution(int[] input, int k) { ArrayList result = new ArrayList(); int length = input.length; if(k... 阅读全文
posted @ 2019-05-03 17:39 路在脚下丶 阅读(253) 评论(0) 推荐(0) 编辑
摘要:import java.util.*; public class Solution{ ArrayList list = new ArrayList(); public ArrayList printMatrix(int [][] matrix) { int rows = matrix.length; int columns = m... 阅读全文
posted @ 2019-04-30 18:38 路在脚下丶 阅读(432) 评论(0) 推荐(0) 编辑
摘要:package edu.cqu.algorithmTest; import java.util.Scanner; /* * 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。 * * 思路:https://blog.csdn.net/sjf0115/article/details/8600599 * * * */ public class... 阅读全文
posted @ 2019-04-12 11:33 路在脚下丶 阅读(566) 评论(0) 推荐(0) 编辑
摘要:判断溢出比较麻烦。num做计算处try catch不知道为什么就是不行。 阅读全文
posted @ 2019-03-25 11:28 路在脚下丶 阅读(304) 评论(0) 推荐(0) 编辑
摘要:方法一:暴力穷举。显然超时了。90/103。 对上述方法进行优化,当必须新的子串长度大于已经找到的回文数,才进行判断,否则有无回文都不必判断。(103/103)用例全部通过,超时 阅读全文
posted @ 2019-03-19 17:17 路在脚下丶 阅读(315) 评论(0) 推荐(0) 编辑
摘要:方法一:水平扫描法 公共前缀一定是第一个子串的前缀,首先把整个第一个子串当作前缀,然后向下查询,如果发现全部以第一个子串开头,则第一个子串就是前缀;如果出现不同情况,prefix从后往前缩短即可。 这里很巧妙,先找出第二个子串和第一个子串的公共前缀,然后再找第三个和前两个的公共前缀。以此类推 方法二 阅读全文
posted @ 2019-03-19 14:02 路在脚下丶 阅读(418) 评论(0) 推荐(0) 编辑
摘要:如果是最长子序列,题目就变得很容易。定义一个集合,往中间扔元素,出现重复,取出即可。 方法一: 方法二: 阅读全文
posted @ 2019-03-18 16:40 路在脚下丶 阅读(434) 评论(0) 推荐(0) 编辑
摘要:题目的分类是简单,但是很惭愧,搞了很久没搞出来。分析大神用Java做的: 其中巧妙的用到了正则表达式分割,list.sort的排序,substring等。首先把所有字符串输入列表 list 里面,然后将数字log提取到 queue, 对列表的元素进行排序后再把队列的插入列表,最后返回 list.to 阅读全文
posted @ 2019-03-18 13:17 路在脚下丶 阅读(379) 评论(0) 推荐(0) 编辑
摘要:给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 1)使用vector定义不定长集合 2)使用自带的max函数 3)dp[i]表示第i个数加入dp中的结果。当第i个数加入dp中时,我们依次遍历[0,i)的所有情况。一开始,我们总是假设dp[i] = 1;然后逐步增大j的值,当出现满足条 阅读全文
posted @ 2019-03-16 22:02 路在脚下丶 阅读(145) 评论(0) 推荐(0) 编辑
摘要:题目描述: 阅读全文
posted @ 2019-03-16 15:13 路在脚下丶 阅读(226) 评论(0) 推荐(0) 编辑
摘要:记录一下踩的坑。注释处必须是else,如果俩if就报错 阅读全文
posted @ 2019-03-15 15:24 路在脚下丶 阅读(677) 评论(0) 推荐(0) 编辑
摘要:一、关于Java中的Arrays.copyOfRange()方法 要使用这个方法,首先要import java.util.*; Arrays.copyOfRange(T[ ] original,int from,int to) 将一个原始的数组original,从小标from开始复制,复制到小标to 阅读全文
posted @ 2019-03-13 10:51 路在脚下丶 阅读(285) 评论(0) 推荐(0) 编辑
摘要:package edu.cqu.algorithmTest; import java.util.Scanner; // 全排列,递归实现 public class Main8 { public static void main(String[] args) { int[] arr = { 1, 2, 3}; bfs(arr, 0, arr.lengt... 阅读全文
posted @ 2019-03-03 12:04 路在脚下丶 阅读(2805) 评论(0) 推荐(0) 编辑