摘要: 大模拟。。。烦这种题 遇到括号匹配的题目,用栈就对了。此题需要栈+Map 没啥难度,写了半天,Debug几个用例后,1A过了 class Solution { class Atom { String s; int cnt = 1; Atom(String s, int cnt) { this.s = 阅读全文
posted @ 2021-07-05 22:36 ACBingo 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 朴素的BFS,注意要考虑输入就是答案的情况 class Solution { class State { int[][] board; int p; int q; int cnt; State(int[][] b, int i, int j) { board = b; p = i; q = j; c 阅读全文
posted @ 2021-06-29 23:29 ACBingo 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 朴素BFS,擦边过。。不难,但是绕,需要想清楚。 大致描述一下做法吧,首先枚举能经过起点站的公交车,将公交车入队列。 然后对当前公交车能到达的每一站,看能否换乘其它公交车,将其它公交车入队。 注意,已经“坐过”的公交车就没有意义再坐一次了,当然,已经去过的站也没有必要再去一次了。所以有两个visit 阅读全文
posted @ 2021-06-28 23:47 ACBingo 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 回溯DFS 但是该递归函数并没有满足「全排列不重复」的要求,在重复的字符较多的情况下,该递归函数会生成大量重复的排列。对于任意一个空位,如果存在重复的字符,该递归函数会将它们重复填上去并继续尝试导致最后答案的重复。 解决该问题的一种较为直观的思路是,我们首先生成所有的排列,然后进行去重。而另一种思路 阅读全文
posted @ 2021-06-23 22:36 ACBingo 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 下一个值覆盖当前值即可。。 class Solution { public void deleteNode(ListNode node) { while (node.next.next != null) { node.val = node.next.val; node = node.next; } 阅读全文
posted @ 2021-06-15 12:37 ACBingo 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 链表形式的大数相加,没什么难的 题目要求不能修改原链表。那就把两个链表遍历一遍,把数取出来放到stack里,再进行相加 或者利用递归?(不过也是一样的,自己构建的栈只是换成了递归栈) class Solution { public ListNode addTwoNumbers(ListNode l1 阅读全文
posted @ 2021-06-15 12:29 ACBingo 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 二分的一种变种,这次是比较条件改变了,相邻的两位来比较,进而判断左右区间的选择 class Solution { public int peakIndexInMountainArray(int[] arr) { int n = arr.length; int left = 1, right = n 阅读全文
posted @ 2021-06-15 00:26 ACBingo 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 二分寻找边界 public class Solution extends VersionControl { public int firstBadVersion(int n) { int i = 1; int j = n; while (i<=j) { int mid = i + ((j-i)>>1 阅读全文
posted @ 2021-06-15 00:05 ACBingo 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 考察二分的一种写法,注意数据的溢出 public class Solution extends GuessGame { public int guessNumber(int n) { int left = 1; int right = n; while (left <= right) { int m 阅读全文
posted @ 2021-06-14 23:55 ACBingo 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 看来最近力扣的每日一题换成了背包啊。 这个问题并不是一个直接的背包问题,需要做一下问题转化的。 把石头尽可能的平均分成两堆,即两堆石头的总重量尽可能的相等。如果所有石头总重量和为sum的话,那么分成的两堆石头,每堆石头的重量尽可能的接近sum/2。 让这两堆石头相撞,最后剩下的最小石头,就是两堆石头 阅读全文
posted @ 2021-06-09 00:04 ACBingo 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 494. 目标和 一看数据最多才20个,直接暴力DFS感觉能过,没想到真过了o(╯□╰)o class Solution { int ans = 0; public int findTargetSumWays(int[] nums, int target) { int n = nums.length 阅读全文
posted @ 2021-06-07 00:14 ACBingo 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 上一个题的变种,改了一下,果然超时,然后在dfs的时候加一些剪枝,仍然超时。。。 因为太晚了,实在不想自己想了,所以看了下题解,果然是要用动态规划来做。 大致思路是k[0][j]表示,当前从0节点出发,到j节点,最少的分隔数。那么得到k[0][j]的递归公式就是 : Min(k[0][t])+1,t 阅读全文
posted @ 2021-06-07 00:01 ACBingo 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 中等题,别看挺简单,能很快写出来代码蛮难的,后面可以用作面试考察题 大致思路遍历链表,对于每一次遍历i,将当前节点从链表上摘除,然后从链表开头到i节点:[head,i),寻找可以插入的位置。注意要处理边界情况:1. 可能插在了当前head节点前面 2. 当i节点的val比[head,i)中所有节点都 阅读全文
posted @ 2021-06-07 00:00 ACBingo 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 题目不难理解,可以将问题转化成判断O构成的连通区域,是否有位于边界的块。 直接用朴素的BFS解决问题。BFS时要向上下左右四个方向都走,走过的块记录的list中,走的同时判断如果有位于边界的块,flag记为true 最后BFS完成后,如果是 false,那么就可以把list中记录的块置为X了;如果f 阅读全文
posted @ 2021-06-06 23:58 ACBingo 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 考察栈的使用,需要注意边界情况。不难,想全TestCase很容易1A通过 class Solution { public String reverseParentheses(String s) { Stack<Character> stack = new Stack<>(); if (s.lengt 阅读全文
posted @ 2021-06-06 23:56 ACBingo 阅读(25) 评论(0) 推荐(0) 编辑