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