摘要:
首先标记出所有的回文子串。boolean f[i][j]表示下标[i,j]构成的子串是回文串。 使用中心扩展法来算出整个f数组:枚举每一个下标为回文串的中心,然后逐渐向两边尽可能的扩展。最终O(n^2)跑完f数组。 然后使用dfs枚举出所有可能性 粗心了一下,可惜没有1A class Solutio 阅读全文
摘要:
蛮简单的一个题,位运算 public int hammingDistance(int x, int y) { int cnt = 0; while (x>0&&y>0) { int a = x & 1; int b = y & 1; if (a!=b) cnt++; x>>=1; y>>=1; } 阅读全文
摘要:
在日常面试中,经常遇到有的候选人甚至连二分都写不对。你可能会说,不就是个二分吗,有啥难的?其实,不要小看二分哦,能完全写对的真的不多。 首先我们先看最朴素的二分写法: public int binarySearch(int[] a, int target) { int left = 0; int r 阅读全文
摘要:
矩阵前缀和。因为矩阵中可能包含负值,所以这题肯定不会存在什么剪枝,动态规划的可能性。所以这个题也就没什么弯弯绕绕。个人感觉算不上个Hard题目。 最直观的思路就是枚举子矩阵,既枚举矩阵的左上角节点和右下角节点所构成的子矩阵。枚举是4层循环。 然后矩阵和的计算是两层循环,肯定不能套在枚举子矩阵的循环里 阅读全文
摘要:
前缀和问题。题目很好理解,读完题我们可以很迅速的想到利用前缀和实现O(n^2)的算法 其实,题目要求只统计满足k的子序列个数。所以当我们遍历到i时,prefix[i] + x = k,所以我们只需要知道x这个值出现了几次,就能统计出i节点所能构成的答案。借用Map结构就能很轻易得到。 最终一次遍历就 阅读全文
摘要:
位运算 231. 2 的幂 ``` class Solution { public boolean isPowerOfTwo(int n) { int cnt = 0; while (n>0) { if ((n & 1) == 1) cnt++; n >>= 1; } return cnt == 1 阅读全文
摘要:
这个题感觉很不错,链表中的部分反转问题、快慢指针问题都可以考察到。 首先,利用快慢指针,找到链表的中位节点,然后对后半部分链表反转。然后对前半部分链表隔一个插入一个就可以了。 143. 重排链表 ``` class Solution { public void reorderList(ListNod 阅读全文
摘要:
4x 其实可以等效于 22x,所以我们仍然是通过位运算求这个2^y是多少,然后判断这个y是不是2的倍数就可以了。 class Solution { public boolean isPowerOfFour(int n) { if (n == 1) return true; int cnt = 0; 阅读全文
摘要:
都儿童节了,为什么要折磨一个几百个月大的孩子? 把题意读懂挺难的。不过读懂后基本也就知道怎么做了。恶心的是int类型可能会越界,要用long类型(很难想到)。这题不好 [1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?](https://leetcode-cn.com/problems/can 阅读全文
摘要:
用归并排序一个链表。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.v 阅读全文
摘要:
我会把前缀和+HashMap刻在我的DNA里。 子数组中0的个数和1的个数相同。其实可以让0变成-1,那么问题是变成了子数组中和为0即满足题意。 sum[i]为前缀和。 如果sum[j] - sum[i] = 0,那么区间[i+1,j]构成的子数组即满足题意。 我们将<sum[i],i>的对应关系存 阅读全文
摘要:
经典链表判断相交,记住就完事了。 160. 相交链表 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = 阅读全文
摘要:
最暴力的办法是需要枚举每一个起点,然后判断从该起点出发能否满足题意。 从暴力算法出发,如何优化呢? 可以不需要枚举每一个起点吗? 不可以,每一个起点的枚举肯定是少不了的 枚举每一个起点后,判断可能性时可以优化吗 可能很快能想到前缀和,能做到O(1)下判断从该点出发后,到最后一个加油站时剩余油量。但是 阅读全文
摘要:
一和零 把总共的 0 和 1 的个数视为背包的容量,每一个字符串视为装进背包的物品。这道题就可以使用 0-1 背包问题的思路完成,这里的目标值是能放进背包的字符串的数量。 动态规划的思路是:物品一个一个尝试,容量一点一点尝试,每个物品分类讨论的标准是:选与不选。 定义状态:尝试题目问啥,就把啥定义成 阅读全文