随笔分类 -  算法竞赛

1 2 3 4 5 ··· 13 下一页
摘要:git diff 用来查看文件变化。 我们在暂存区的c.txt ccccc bbbbb aaaaa 如果在工作区的c.txt修改为 ccccc bbbbb 22222 aaa 11111 执行 git diff c.txt 红色标识的是减少的行,绿色标识新增的行。以此来对比文件的差异。 除了可以对比 阅读全文
posted @ 2020-05-29 16:43 超级学渣渣 阅读(453) 评论(0) 推荐(0)
摘要:在一个数组中,不能选择连续的2个数,问最大可以取值是多少。 这里有两种dp的思路: dp[i]表示抢劫第i间房屋,最多可以抢到的钱。它有两个来源 dp[i-2],dp[i-3]。我们取其中大的值。 有的同学可能要问了,为什么不考虑dp[i-4] dp[i-5]这些更往前的房子? 因为i-5, i-4 阅读全文
posted @ 2020-05-29 10:42 超级学渣渣 阅读(199) 评论(0) 推荐(0)
摘要:这种题算是常规题了,思路也比较固定:利用栈,扫一遍就可以了。直接上代码。 ublic static String decodeString(String s) { char[] sC = s.toCharArray(); int len = s.length(); int indx = 0; cha 阅读全文
posted @ 2020-05-28 19:06 超级学渣渣 阅读(241) 评论(0) 推荐(0)
摘要:从一个数组中,找出所有能整除K的非空的连续的子数组。 这个很容易想到前缀和+哈希表优化。这里会用到一个同余定理:如果两个数对K取模余数相同,则两数之差可以整除K。 public static int subarraysDivByK3(int[] A, int K) { int lenA = A.le 阅读全文
posted @ 2020-05-27 17:10 超级学渣渣 阅读(220) 评论(0) 推荐(0)
摘要:在串s中找出包含串t的所有字符的最小子串。 之前做了一些前缀和的题。想到用前缀和做: 统计第k个字符在第i个位置出现的个数:pre[i][k] .则可以用 前缀和遍历所有的子串组合。然后我们及时的减支 public String minWindow(String s, String t) { cha 阅读全文
posted @ 2020-05-27 11:23 超级学渣渣 阅读(227) 评论(0) 推荐(0)
摘要:原题点这里 求一个数的幂。我们看一下数据范围。很容易就想到Math.pow() public static double myPow(double x, int n) { return Math.pow(x,n); } View Code 哈哈,其实这样有投机的成分。正经的解法:快速幂 我们以 x^ 阅读全文
posted @ 2020-05-27 10:24 超级学渣渣 阅读(189) 评论(0) 推荐(0)
摘要:给定一个字符串,寻找一个最长子字符串,使得包含的原因字母都是偶数个。 我们很容易想到,暴力枚举。然后通过一点点巧妙的减支,可以通过。 首先扫一遍字符串,统计每个字符出现的次数。实际上我们只关注元音字母,不过直接全部统计比较方便(我估计时间上也会快一点) 然后我们枚举 i ~ j ,i 从0 到 le 阅读全文
posted @ 2020-05-20 15:56 超级学渣渣 阅读(452) 评论(0) 推荐(0)
摘要:原题点这里 知识点:List的复制:目的List的大小必须与源List的大小一致 List tmp = Arrays.asList(new Object[ans.size()]); Collections.copy(tmp,ans); JDK8 以后,只有在放入数据后,List中存储数据的数组才会初 阅读全文
posted @ 2020-05-19 19:31 超级学渣渣 阅读(160) 评论(0) 推荐(0)
摘要:原题点这里 给定一个非空字符串,判断是否可以通过删除一个字符串,使得剩余的字符串为回文串。 很容易想到双指针,当可以删除时,尝试删除,然后递归。 public static boolean validSub(String s,int left,int right,int del){ if(del>1 阅读全文
posted @ 2020-05-19 19:19 超级学渣渣 阅读(209) 评论(0) 推荐(0)
摘要:在一个数组中,找到和为K的连续子数组的个数。 可以很自然的想到枚举所有子数组组合。复杂度为n^2 public int subarraySum(int[] nums, int k) { int len = nums.length; int ans=0; for(int i=0;i<len;i++){ 阅读全文
posted @ 2020-05-15 17:26 超级学渣渣 阅读(534) 评论(0) 推荐(1)
摘要:原题点这里 统计只出现一次的数字 这个很容易想到用 map或set做。 public int singleNumber(int[] nums) { int n = nums.length; HashSet<Integer> record = new HashSet<>(); for(int i=0; 阅读全文
posted @ 2020-05-14 10:33 超级学渣渣 阅读(148) 评论(0) 推荐(0)
摘要:原题点这里 给一个数组,一个目标值,在数组中选出3个数,使其和最接近目标值。 受到15题的启发,使用双指针解决。 public static int threeSumClosest(int[] nums, int target) { int len = nums.length; Arrays.sor 阅读全文
posted @ 2020-05-13 14:07 超级学渣渣 阅读(146) 评论(0) 推荐(0)
摘要:原题点这里 取三个数,使和为0,输出所有的组合。各个组合之间不能重复。 这是个稍微复杂一点的逻辑题。它要求所有的组合不能重复。我们很容易想到三个循环嵌套,分别取三个数,判断加和是否为0,如果为0,判断是否重复。其复杂度为n^3. public static List<List<Integer>> t 阅读全文
posted @ 2020-05-12 11:20 超级学渣渣 阅读(156) 评论(0) 推荐(0)
摘要:原题点这里 输入的字符串里包含着空格,我们以空格为边界,分割字符串。 split(" ") 然后我们遍历分割后的字符串,把他们拼接在一起。 最后,我们做一下判断,如果最后一个字符是空格,要删除掉。 这里注意的是,要先判断拼接之后的字符串是否为空串 public static String rever 阅读全文
posted @ 2020-04-10 19:38 超级学渣渣 阅读(182) 评论(0) 推荐(0)
摘要:原题点这里 方法1: 通过dfs,穷举所有的可能,然后判断每一种可能,是否合法。 public static List<String> generateParenthesis(int n) { List<String> ans = new ArrayList<>(); char[] par = ne 阅读全文
posted @ 2020-04-09 20:57 超级学渣渣 阅读(193) 评论(0) 推荐(0)
摘要:原题点这里 bfs可以实现。这里注意的是,机器人从00出发,我们只要向右,向下走就可以了 public static int movingCount(int m, int n, int k) { int[] dx=new int[] {-1,1,0,0}; int[] dy = new int[]{ 阅读全文
posted @ 2020-04-08 20:33 超级学渣渣 阅读(432) 评论(0) 推荐(0)
摘要:原题点这里 搞个矩阵,翻转一下就行。题目说不占额外内存,但是我这样做了,内存也是前100%.估计是JAVA启动的时候就加载了一些东西。 看题解也都是n^2复杂度,就这样了吧。 public static void rotate(int[][] matrix) { int rows = matrix. 阅读全文
posted @ 2020-04-07 19:54 超级学渣渣 阅读(335) 评论(0) 推荐(0)
摘要:原题点这里 class Node implements Comparable<Node>{ public int key; public int value; public int lastTime; public int fre; public Node(int key,int value,int 阅读全文
posted @ 2020-04-06 19:46 超级学渣渣 阅读(175) 评论(0) 推荐(0)

1 2 3 4 5 ··· 13 下一页