leetcode-201-数字范围按位与】的更多相关文章

C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解 在线提交: https://leetcode.com/problems/bitwise-and-of-numbers-range/ 题目描述 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 题目难度:Medium 通过次…
201. 数字范围按位与 201. Bitwise AND of Numbers Range 题目描述 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). LeetCode201. Bitwise AND of Numbers Range中等 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 Java 实现 方法一 class Solution { public…
201. 数字范围按位与 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 class Solution { public int rangeBitwiseAnd(int m, int n) { while (m < n) n &= n - 1; return n; } }…
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 思路分析 由于是按位与,那么某位一旦出现0,结果该位肯定是0.所以只需要考虑m,n都是1的位置.那么直接从高位开始,往低位走,直到遇到该为的数字不相等,将其后的数为都置为0,即为[m,n]之间所有的数字按位与的结果.代码如下 #include<bits/st…
https://leetcode.com/problems/bitwise-and-of-numbers-range/discuss/56729/Bit-operation-solution(JAVA) 面试官,你再问我 Bit Operation 试试? 描述 Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusi…
给定范围 [m,n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含m, n两端点).例如,给定范围 [5,7],您应该返回 4. 详见:https://leetcode.com/problems/bitwise-and-of-numbers-range/description/ Java实现: 将m和n中的所有整数相与,得到的结果是m和n中的所有数的共同高位保留,除共同高位之外的其他位置零.那么关键问题就是如何找到这个共同的高位,其实并不难…
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive. Example 1: Input: [5,7] Output: 4 Example 2: Input: [0,1] Output: 0 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字…
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 因为i和i + 1只相差1,所以两个数二进制的最后一位一定不一样,最后一位按位与结果一定是0.所以n,m按位与的最后一位肯定是0,我们只需要计算除去最后一位的二进制按位与的结果.即除以2后按位与的结果. class Solution { public: int r…
https://leetcode.com/problems/bitwise-and-of-numbers-range/ [n,m]区间的合取总值就是n,m对齐后前面一段相同的数位的值 比如 5:101 7:111 结果就是 4:100 class Solution { public: int rangeBitwiseAnd(int m, int n) { int len = 0; long long tmp = 1; for(;tmp <= n || tmp <= m;len++){tmp&l…
第七题,Reverse Integer.(https://leetcode.com/problems/reverse-integer/description/) 注意事项:翻转之后,数据有可能会超过INT_MAX或者INT_MIN,所以最后用一个大一点的类型保存. leetcode中的跑的最快的解决办法,8ms: class Solution { public: int reverse(int x) { ?:-; long val=x; //注意,此处用long来定义,避免溢出 ) val=-v…
375. 猜数字大小 II 原题链接375. 猜数字大小 II 题目下方给出了几个提示: 游戏的最佳策略是减少最大损失,这引出了 Minimax 算法,见这里,和这里 使用较小的数开始(例如3),看看在最差的情况下你要支付多少钱? 即使 n 比较小,完全使用递归的效率也很低,试试动态规划吧. 我们就按照上面的提示玩一把:猜数字大小 II. 当 n = 3,那么我们有 3 个选择:1 或 2 或 3. 假设我们先猜 1,就有两种情况: [猜对]:1 就是正确的数字,所以你支付 0¥,或者 [猜错]…
数字的补数 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含前导零位. 示例 1: 输入: 5 输出: 2 解释: 5的二进制表示为101(没有前导零位),其补数为010.所以你需要输出2. 示例 2: 输入: 1 输出: 0 解释: 1的二进制表示为1(没有前导零位),其补数为0.所以你需要输出0. [思路] 如果我们能知道该数最高位的1所在的位置,就可以构造一个长度和该数据所占位置一样长的一个掩码mas…
数字1的个数 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 . 1的总个数为1在1~n所有数中 个位数上有1的个数+十位数上有1的个数+...+亿位数上有1的个数+... 自己动手亲自找一遍规律就能得出答案: 首先,找规律: 13 个位数为1:1 11 十位数为1:10 11 12 13 1的总个数为: 2+4=6 23 个位数为1:1  11 21 十位数为…
43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", num2 = "3" 输出: "6" 示例 2: 输入: num1 = "123", num2 = "456" 输出: "56088" 说明: num1 和 num2 的长度小于110. num1…
给定一个整数,编写一个算法将这个数转换为十六进制数.对于负整数,我们通常使用 补码运算 方法. 注意: 十六进制中所有字母(a-f)都必须是小写. 十六进制字符串中不能包含多余的前导零.如果要转化的数为0,那么以单个字符'0'来表示:对于其他情况,十六进制字符串中的第一个字符将不会是0字符. 给定的数确保在32位有符号整数范围内. 不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法. 示例 1: 输入: 26 输出: "1a" 示例 2: 输入: -1 输出: "f…
476. 数字的补数 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 示例 1: 输入: 5 输出: 2 解释: 5 的二进制表示为 101(没有前导零位),其补数为 010.所以你需要输出 2 . 示例 2: 输入: 1 输出: 0 解释: 1 的二进制表示为 1(没有前导零位),其补数为 0.所以你需要输出 0 . 注意: 给定的整数保证在 32 位带符号整数的范围内. 你可以假定二进制数不包含前导零位. 本题与 1009 https://leetcode-cn.com/pro…
405. 数字转换为十六进制数 给定一个整数,编写一个算法将这个数转换为十六进制数.对于负整数,我们通常使用 补码运算 方法. 注意: 十六进制中所有字母(a-f)都必须是小写. 十六进制字符串中不能包含多余的前导零.如果要转化的数为0,那么以单个字符'0'来表示:对于其他情况,十六进制字符串中的第一个字符将不会是0字符. 给定的数确保在32位有符号整数范围内. 不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法. 示例 1: 输入: 26 输出: "1a" 示例 2: 输入…
233. 数字 1 的个数 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 . <编程之美>上这样说: 设N = abcde ,其中abcde分别为十进制中各位上的数字. 如果要计算百位上1出现的次数,它要受到3方面的影响:百位上的数字,百位以下(低位)的数字,百位以上(高位)的数字. 如果百位上数字为0,百位上可能出现1的次数由更高位决定.比如:12013,…
问题描述 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 . 问题分析 这道题可以换一个思路,即[0,n]中有多少个小于n的第i位为1的数,例如n = 12345时,我们要找百位数为1时,存在多少数m小于12345,我们分为两部分,设\(m = p1q\), 如果\(p\in[0,11]\)时,\(q\)可以取\([0,99]\)之间任意一个数,共100个, 如…
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive. For example, given the range [5, 7], you should return 4. 解题思路: 本题有很多思路,最简单的方法: result就是m和n二进制前面相同的部分!!! JAVA实现如下: public int ra…
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive. For example, given the range [5, 7], you should return 4. 题意: 给定 [m, n] 范围内个数,返回范围内所有数相与的结果. 思路: 如果打着暴力的旗号,那么这个题是会超时的 - -!.最后也是没…
Problem: Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive. For example, given the range [5, 7], you should return 4. Analysis: The idea behind this problem is not hard, you could…
2018-08-13 22:50:51 问题描述: 问题求解: 首先如果m 和 n不相等,那么必然会有至少一对奇偶数,那么必然末尾是0. 之后需要将m 和 n将右移一位,直到m 和 n相等. 本质上,本题就是求m 和 n的最长preSubNum. public int rangeBitwiseAnd(int m, int n) { if (m == 0) return 0; int moveFactor = 1; while (m != n) { m >>= 1; n >>= 1;…
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8 说明: 你的算法应具有线性时间复杂度.你能否仅使用额外常数空间来实现? /** * @param {number[]} nums * @return {number} */ var missingNumber = function (nums) { let map…
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive. For example, given the range [5, 7], you should return 4. 题解:如果m==n,那么答案就是m. 如果m<n,那么二进制最右边一位在最后的结果中肯定是0,那么就可以转化成子问题: rangeBi…
前言 为日后的算法面试做准备,自己也很喜欢算法这个东西,每天3~5道题. 刷题 1.leetcode 209 长度最下的子数组 题目 长度最下的子数组 大致的意思是从数组中找到长度最小的数组,并且数组内的和是大于等于给定的数target的 思路 最基本的思路当然是双重遍历,时间复杂度是O(N2),但是本题的数据大小为105,所以这是肯定过不掉的,所以我们需要优化. 我们可以发现的是,对于满足条件的某个区间,区间左右端点分别i与j,其中i表示最接近j的那个数的下标,当j向右移动的时候,i也会向右移…
本文总结LeetCode上有关双指针.位运算和分治法的算法题,推荐刷题总数14道.具体考点分析如下图: 一.双指针 1.字符串和数组问题 题号:424. 替换后的最长重复字符,难度中等 题号:828. 独特字符串,难度困难 题号:923. 三数之和的多种可能,难度中等 2.实际场景应用问题 题号:826. 安排工作以达到最大收益,难度中等 3.元素对问题 题号:986. 区间列表的交集,难度中等 二.位运算 1.字符串和数组问题 题号:137. 只出现一次的数字 II,难度中等 题号:318.…
位运算篇 # 题名 刷题 通过率 难度 78 子集   67.2% 中等 136 只出现一次的数字 C#LeetCode刷题之#136-只出现一次的数字(Single Number) 53.5% 简单 137 只出现一次的数字 II   60.7% 中等 169 求众数 C#LeetCode刷题之#169-求众数(Majority Element) 52.2% 简单 187 重复的DNA序列   39.7% 中等 190 颠倒二进制位 C#LeetCode刷题之#190-颠倒二进制位(Rever…
刷题备忘录,for bug-free leetcode 396. Rotate Function 题意: Given an array of integers A and let n to be its length. Assume Bk to be an array obtained by rotating the array A k positions clock-wise, we define a "rotation function" F on A as follow: F(k…
刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度. 如: 给出[100, 4, 200, 1, 3, 2], 最长的连续元素序列是[1, 2, 3, 4].返回它的长度:4. 你的算法必须有O(n)的时间复杂度 . 解法: 初始思路 要找连续的元素,第一反应一般是先把数组排序.但悲剧的是题目中明确要求了O(n)的时间复杂度,要做一次排序,是不能达…