上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 20 下一页
摘要: 暴力做法是,枚举从m~n的所有数,因为题目说了数据最大为2147483647,所以可以枚举0~30位,对所有数字的每一位做与运算。 数据比较大的时候这样做会超时(时间复杂度是O(n))。 参考官方题解,有一个简单得多的做法。 观察发现,要对所有数做按位与,只要有一个数的某一位为0,则最后按位与的结果 阅读全文
posted @ 2020-08-04 17:25 machine_gun_lin 阅读(158) 评论(0) 推荐(0)
摘要: 非常经典的搜索问题。遍历数组,从每一个1开始深度优先搜索当前位置联通的位置是否都是1(也就是与它联通的陆地),用一个额外的布尔数组visited记录每一个位置的元素是否已经访问过,每个遍历过的位置visited都标记为true。 代码如下: class Solution { public: vect 阅读全文
posted @ 2020-08-04 16:46 machine_gun_lin 阅读(81) 评论(0) 推荐(0)
摘要: 二叉树层次遍历,用一个数组记录每一层的最右边的元素。 class Solution { public: vector<int> rightSideView(TreeNode* root) { if(root == NULL) { return {}; } vector<int> res; queue 阅读全文
posted @ 2020-08-04 16:16 machine_gun_lin 阅读(75) 评论(0) 推荐(0)
摘要: 用dp[i]表示打劫到第i个房子(i从0开始)时能获取到的最高金额,显然对于第i个房子,我们有打劫和不打劫两种方案。 如果不打劫第i个房子,那么到第i个房子能获取的最高金额和到第i - 1个房子能获取到的最高金额是一样的(因为到了第i个房子这里没有收入嘛)。因此我们有dp[i] = dp[i - 1 阅读全文
posted @ 2020-08-04 16:04 machine_gun_lin 阅读(69) 评论(0) 推荐(0)
摘要: 循环,逐位判断每一位是不是1。 class Solution { public: int hammingWeight(uint32_t n) { int res = 0; for(int i = 0; i < 32; ++i) { res += (n >> i & 1) == 1 ? 1 : 0; 阅读全文
posted @ 2020-08-04 15:48 machine_gun_lin 阅读(41) 评论(0) 推荐(0)
摘要: 颠倒一个32位无符号整数的二进制位,因为它只有32位,所以我们可以用一个循环,从最低位开始获取它的当前位的数字,然后循环32次把数字加到一个新的32位无符号整数上,然后返回这个32位无符号整数就ok。 对于数字n,要获取最低位的数字就是 n & 1,也可以理解为n >> 0 & 1,意思就是n的二进 阅读全文
posted @ 2020-08-04 15:42 machine_gun_lin 阅读(69) 评论(0) 推荐(0)
摘要: 要右移k次,且只能用O(1)的空间,最简单的办法是循环k次,每次用一个变量temp记录最后一个位置的值,然后让最后一个下标(下标从0开始)到下标1的值都为前一个元素的值,再让下标0的值为temp。 这样进行k次之后,就完成了循环右移k次。 不过这样会超时,一个较简单的做法是,对于右移到数组前边的k个 阅读全文
posted @ 2020-08-04 15:28 machine_gun_lin 阅读(63) 评论(0) 推荐(0)
摘要: 动态规划,用dp[i][j]表示第i行第j列的格子到终点所需的最小初始值,这题如果从左上往右下递推,就需要同时记录从起点到当前位置的路径和以及从起点到当前位置所需要的最小初始值,比较麻烦。 因此我们可以从右下往左上递推,这样递推到每个格子只需要维护当前位置到起点(这里的起点是右下角了)的最小初始值, 阅读全文
posted @ 2020-08-03 16:46 machine_gun_lin 阅读(66) 评论(0) 推荐(0)
摘要: 几千位的字符串,肯定不能转成数字再加了(也转不了),不过还好只要做加法,可以对每一位进行加法,注意进位即可。 可以把两个字符串右对齐,然后对每一位进行加法,每一位计算出来的数字加到一个结果字符串里,这样计算完成后(遍历完num1和num2以及进位为0了), 就把字符串反转一遍,就得到了两个字符串相加 阅读全文
posted @ 2020-08-03 11:27 machine_gun_lin 阅读(76) 评论(0) 推荐(0)
摘要: 因为字符串可以按照字典序比较大小,所以可以自己写一个排序规则cmp,然后对数组中的所有整数转换成字符串之后再按照自己定义的规则排序。 排序之后,再将所有字符串连接起来,就是它们能够组成的最大整数。 注意特殊情况的判断,如果数组全是0,我们不想要输出"00000...00000"这种情况,只要输出一个 阅读全文
posted @ 2020-08-02 21:29 machine_gun_lin 阅读(104) 评论(0) 推荐(0)
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 20 下一页