【位运算】
1
wdt_
即使上线也匆忙,新版本,愁断肠,orz...
展开
-
【位运算】C018_LQ_明码(C++ bitset<k> / 人工转二进制)
汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,一共16行,布局是:第1字节,第2字节第3字节,第4字节…第31字节, 第32字节这道题目是给你一段多个汉字组成的信息,每个汉字用32个字节表示,这里给出了字节作为有符号整数的值。题目的要求隐藏在这些信息中。你的任务是复原创 2020-08-28 23:04:03 · 252 阅读 · 0 评论 -
【位运算】B017_LC_第K个语法符号(找本行和上一行的规律)
一、Problem在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)输入: N = 4, K = 5输出: 1解释:第一行: 0第二行: 01第三行: 0110第四行: 01101001注意:N 的范围 [1, 30].K 的范围 [1, 2^(N-1)].二、Solution方法一:递归思考K 很大,休想骗我拿出暴力法;规律是:第 N 行的前半段由第 N-1 行整行构原创 2020-08-06 15:59:26 · 253 阅读 · 0 评论 -
【位运算】B016_LC_递归乘法(小技巧 / 快速幂思想)
一、Problem递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。示例1: 输入:A = 1, B = 10 输出:10 示例2: 输入:A = 3, B = 4 输出:12提示:保证乘法范围不会溢出二、Solution方法一:技巧加法…class Solution {public: int dfs(int a, int b) { if (a==1) return b; i原创 2020-08-06 11:43:37 · 214 阅读 · 0 评论 -
【位运算】A015_LC_找到最接近目标值的函数值(暴力+剪枝 / 滚动hash表优化)
一、ProblemWinston 构造了一个如上所示的函数 func 。他有一个整数数组 arr 和一个整数 target ,他想找到让 |func(arr, l, r) - target| 最小的 l 和 r 。请你返回 |func(arr, l, r) - target| 的最小值。请注意, func 的输入参数 l 和 r 需要满足 0 <= l, r < arr.length 。示例 1:输入:arr = [9,12,3,7,15], target = 5输出:2解释:所原创 2020-07-19 19:02:14 · 260 阅读 · 0 评论 -
【位运算】C014_LC_ 可被 5 整除的二进制前缀(暴力大数 / 同余(2转10进制 新发现))
一、Problem给定由若干 0 和 1 组成的数组 A。我们定义 N_i:从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表 answer,只有当 N_i 可以被 5 整除时,答案 answer[i] 为 true,否则为 false。输入:[0,1,1]输出:[true,false,false]解释:输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数可以被 5 整除,因此 answer[0] 为真。原创 2020-07-03 11:03:42 · 227 阅读 · 0 评论 -
【位运算】B013_LC_ 按列翻转得到最大值等行数(统计行的模式数)
一、Problem给定由若干 0 和 1 组成的矩阵 matrix,从中选出任意数量的列并翻转其上的 每个 单元格。翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 。返回经过一些翻转后,行上所有值都相等的最大行数。输入:[[0,0,0],[0,0,1],[1,1,0]]输出:2解释:翻转前两列的值之后,后两行由相等的值组成。提示:1 <= matrix.length <= 3001 <= matrix[i].length <= 300所有 matrix[原创 2020-06-29 17:42:28 · 342 阅读 · 0 评论 -
【位运算】B012_LC_负二进制转换(通用 k 进制)
一、ProblemGiven a number N, return a string consisting of "0"s and "1"s that represents its value in base -2 (negative two).The returned string must have no leading zeroes, unless the string is “0”.Example 1:Input: 2Output: "110"Explantion: (-2) ^ 2 +原创 2020-06-29 16:34:45 · 193 阅读 · 0 评论 -
【位运算】B011_LC_循环码排列(回溯 / 格雷码变形 + 旋转 (代办))
一、ProblemGiven 2 integers n and start. Your task is return any permutation p of (0,1,2…,2^n -1) such that :p[0] = startp[i] and p[i+1] differ by only one bit in their binary representation.p[0] and p[2^n -1] must also differ by only one bit in their b原创 2020-06-11 17:15:30 · 235 阅读 · 0 评论 -
【字符串】B049_LC_子串的最大出现次数(暴力 / 位运算)
一、ProblemGiven a string s, return the maximum number of ocurrences of any substring under the following rules:The number of unique characters in the substring must be less than or equal to maxLetters.The substring size must be between minSize and maxSiz原创 2020-06-06 08:22:03 · 159 阅读 · 0 评论 -
【位运算】B010_LC_字母组合迭代器(二进制枚举)
一、ProblemDesign an Iterator class, which has:A constructor that takes a string characters of sorted distinct lowercase English letters and a number combinationLength as arguments.A function next() that returns the next combination of length combinationL原创 2020-06-04 16:13:54 · 174 阅读 · 0 评论 -
【数组】B061_LC_形成两个异或相等数组的三元组数目(暴力 / 暴力优化 / 前缀和 / 异或规则)
一、ProblemGiven an array of integers arr. We want to select three indices i, j and k where (0 <= i < j <= k < arr.length).Let’s define a and b as follows:a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]Note t原创 2020-05-10 22:14:29 · 196 阅读 · 0 评论 -
【位运算】二进制枚举入门
一、Problem有 5 种硬币,他们面值分别为:1,2, 3, 4, 5,请列出所有面值组合。比如如果选出面值为 1、3、4 的硬币,则输出 1 3 4二、Solution方法一:位运算这似乎就是在有 N 个元素的集合里求不同的子集,而又有含有 0 个元素的子集有 CN0C_N^0CN0 个,含有 1 个元素的子集有 CN1C_N^1CN1 个,含有 2 个元素的子集有 ...原创 2020-05-01 10:20:52 · 1009 阅读 · 1 评论 -
【位运算】C_009_LQ_完美运算(三进制)
一、Problem472701二、Solution方法一:三进制可以先打表,即预处理 [1, 2020] 中的每个数的 a1 和 a2,分别保存到两个数组中…import java.util.*;import java.math.*;import java.io.*;public class Main{ static class Solution { int[] A(in...原创 2020-04-29 22:18:31 · 410 阅读 · 0 评论 -
【位运算】B007_LC_将二进制表示减到 1 的步骤数(字符串二级制加法 / BigInteger)
一、题目描述给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:如果当前数字为偶数,则将其除以 2 。如果当前数字为奇数,则将其加上 1 。题目保证你总是可以按上述规则将测试用例变为 1 。输入:s = "1101"输出:6解释:"1101" 表示十进制数 13 。Step 1) 13 是奇数,加 1 得到 14 Step 2) 14 是偶...原创 2020-04-05 19:43:59 · 216 阅读 · 0 评论 -
【字符串】C021_反转字符串(双指针 | 异或 ^)
一、题目描述Write a function that reverses a string. The input string is given as an array of characters char[].Do not allocate extra space for another array, you must do this by modifying the input array...原创 2020-03-19 11:20:09 · 196 阅读 · 0 评论 -
【位运算】进制数转换、奇思妙想
理论二进制数字中某位的权重:2N−12^{N - 1 }2N−1 次方,N 为该位所在的位数。二进制转十进制:数字中所有位 × 本位的权重然后求和。实践用轮子好了看了那么多理论,是需要实践来巩固一下得了:public class 十进制与各进制的相互转换 { public static void main(String[] args){ int decimal = 10...原创 2020-03-18 16:06:00 · 418 阅读 · 0 评论 -
【进制】十六进制的解疑
一、什么是十六进制?十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。它由0-9,A-F(a-f)组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。二、运算规则(1)公式十进制数转换成十六进制数的方法是:十进制数的整数部分“除以16取余”,十进制数的小数部分“乘1...原创 2020-02-29 18:23:25 · 1324 阅读 · 0 评论 -
【数学】C046_整数替换(递归 | 位运算)
一、题目描述Given a positive integer n and you can do operations as follow: If n is even, replace n with n/2. If n is odd, you can replace n with either n + 1 or n - 1.What is the minimum number of repl...原创 2020-02-11 18:29:20 · 200 阅读 · 0 评论 -
【位运算】C_006 将数字变成0的操作次数(奇偶判断 | -1 优化)
一、题目描述Given a non-negative integer num, return the number of steps to reduce it to zero. If the current number is even, you have to divide it by 2, otherwise, you have to subtract 1 from it.Input:...原创 2020-02-10 16:16:16 · 243 阅读 · 0 评论 -
【位运算】C_005 比特位计算(按位与 | 优化 | dp)
一、题目描述给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。输入: 5输出: [0,1,1,2,1,2]二、题解(1)按位与&(3ms)public class Main { private static int f(int i) { int ans=0; while (i!...原创 2019-12-05 00:20:27 · 630 阅读 · 0 评论 -
【位运算】C004_多数元素(暴力破解 | Map | 排序 | 摩尔投票 | 分治)
一、题目描述给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。二、题解(1) 暴力破解(1663ms)没遍历得到一个元素,继续遍历一遍数组,通过对比记录符合题意的元素的个数countpublic static int majorityElement2(int[] nums) { int count=0; int n=nums...原创 2019-12-05 00:12:14 · 234 阅读 · 0 评论 -
【位运算】C003_输出指定位数的二进制数(按位与)
一、题目描述给定一个整数n,打印n的指定位数的二进制数。二、题解(1) 按位与public class Main { private static void f(int n, int num) { int mask = 1; mask <<= n-1; for(; mask > 0; mask >>= 1) System....原创 2019-12-03 16:59:00 · 465 阅读 · 2 评论 -
【位运算】C002_位1的个数( 按位与 | 优化)
一、题目描述编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。输入:11111111111111111111111111111101输出:31解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。二、题解(1) 按位与&从低位到高位将数字 n 的二进制的每...原创 2019-12-03 16:51:07 · 240 阅读 · 0 评论 -
【位运算】C001_明汉距离(字符串处理 | 按位异或 | 库函数)
一、题目描述两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 2^31.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑二、题解这里不会一上来就给出位运算,而是一步步优化代码…(1) ...原创 2019-12-03 16:37:29 · 266 阅读 · 0 评论