算法
sodawoods
LETSGETIT
展开
-
算法常用技巧:数学运算
(a + b + c) % k = (a % k + b % k + c % k) % k如果(a - b) % k = 0,那么a % k = b % k原创 2021-06-02 20:53:31 · 221 阅读 · 0 评论 -
算法常用技巧:数组与矩阵
对于一个m行n列的矩阵matrix,左上角元素索引是0,右下角元素索引是m*n-1,将矩阵的每个元素逐行从左到右编号,那么编号是i的位置的元素是matrix[i/n][i%n]原创 2021-03-30 22:00:29 · 115 阅读 · 0 评论 -
算法常用技巧:字符串
字符串预处理-对于字符串s,判断i到j的子串是否是回文串 int len = s.length(); // s[i ~ j]是否为回文串,如果s[i] == s[j]并且isPalindrome[i + 1][j - 1]是true,那么isPalindrome[i][j]也是true boolean[][] isPalindrome = new boolean[len][len]; for (int i = 0; i < len; i++) {.原创 2021-03-07 21:33:44 · 81 阅读 · 0 评论 -
算法常用技巧:位运算
当且仅当正整数y&(y - 1)=0时,正整数y是2的整数次幂二进制表示中,奇数一定比前面那个偶数多一个 1,因为多的就是最低位的 1二进制表示中,偶数中 1 的个数一定和除以 2 之后的那个数一样多。因为最低位是 0,除以 2 就是右移一位,也就是把那个 0 抹掉而已,所以 1 的个数是不变的y & (y - 1)可以抹掉y最右边的1...原创 2021-03-03 20:32:47 · 178 阅读 · 2 评论 -
LeetCode-20200821-20200927
钥匙和房间题目。把二叉搜索树转换为累加树。给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/convert-bst-to-greater-tree思路。给定的是一个二叉搜索树,我们知道二叉搜索树的中序遍历结果是一个非递减的序列。因此我们可以先遍历一遍树,得到所有节点的和。然后再原创 2020-09-26 20:17:16 · 94 阅读 · 0 评论 -
LeetCode-20200831-20200906
钥匙和房间题目。有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返原创 2020-09-07 23:28:56 · 564 阅读 · 0 评论 -
LeetCode-20200824-20200830
重复的子字符串题目。给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。思路。O(N*N) 的解法比较好想。O(N)的解法是将两个 s连在一起得到ss,并移除第一个和最后一个字符。如果 ss 是该字符串的子串,那么 ss 就满足题目要求。代码。public boolean repeatedSubstringPattern(String s) { if (s == null || s.length() == 0)原创 2020-08-29 23:49:13 · 259 阅读 · 0 评论 -
LeetCode-20200817-20200823
1 平衡二叉树题目。给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。思路。递归求解即可。左子树和右子树都是平衡二叉树并且左右子树的高度差小于等于1。代码。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode rig原创 2020-08-22 22:52:42 · 118 阅读 · 0 评论 -
LeetCode-20200810-20200816
1 计数二进制子串题目:给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-binary-substrings思路:暴力解法的时间复杂度是O(N*N),会超时。注意到在处理位置i时,可以利用i-1位置的信息,因此可以通过动态规划进行求解。代码public i原创 2020-08-14 21:33:31 · 160 阅读 · 0 评论