题目 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。 ``` 示例 1: 输入:n = 00000010100101000001111010011100 输出:964176192 (00111001011110000010100101000000) 解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596, 因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。 示例 2: 输入:n = 11111111111111111111111111111101 输出:3221225471 (101111111
题目 DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.。 例如,"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。 示例 1: 输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" 输出:["AAAAACCCCC","CCCCCAAAAA"] 示例 2: 输入:s = "AAAAAAAAAAAAA" 输出:["AAAAAAAAAA"] 提示: 0 <= s.length <= 105 s[i]=='A'、'C'、'G' or 'T' 思路 遍历每一个10位的字符串,统计其出现的次数。因为次数可能持续增加,所以, 判断当次数等于2的时候,就可以把当前的10位字符串加入答案数组。使用一个 10位字符的滑动窗口从左滑到右,遍历所有的10位字符串。字符只有4个,两位二进制 就可以表示。把字符串表示为
题目 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且不使用额外空间来解决此问题。 示例 1: 输入:nums = [2,2,3,2] 输出:3 示例 2: 输入:nums = [0,1,0,1,0,1,99] 输出:99 提示: 1 <= nums.length <= 3 * 104 -231 <= nums[i] <= 231 - 1 nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 思路 因为除某个元素仅出现一次,其余每个数都恰好出现三次,出现三次的数, 其二进制表示的每一位也出现三次,所有数的二进制表示的第i位的数量 除以3的余数就是出现一次元素的第i位数字。本题是只出现一次的数字的 升级版,本题的方法其实也适合只出现一次的数字,是一个更通用的方法。 其他数字出现2次、3次、4次、...。都可以使用本题方法解决 代码 class Solution { public: int singleNumber(vecto
题目 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : 输入:nums = [2,2,1] 输出:1 示例 2 : 输入:nums = [4,1,2,1,2] 输出:4 示例 3 : 输入:nums = [1] 输出:1 提示: 1 <= nums.length <= 3 * 104 -3 * 104 <= nums[i] <= 3 * 104 除了某个元素只出现一次以外,其余每个元素均出现两次。 思路 这题太巧了,好像就是针对异或运算出的。异或运算相同位结果为0,不同位结果为1,数a和0异或结果还是数a,数a和数a异或结果为0。异或运算还被称为不进位的二进制加法。也符合交换律和结合律。所以把数组内的数从头到尾异或一遍,结果就是只出现一次的数。 代码 class Solution { public: int singleNumber(vector<int>& nums)
题目 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 1: 输入:nums = [1,2,2] 输出:[[],[1],[1,2],[1,2,2],[2],[2,2]] 示例 2: 输入:nums = [0] 输出:[[],[0]] 提示: 1 <= nums.length <= 10 -10 <= nums[i] <= 10 思路 本题是在子集的基础上添加了相同元素。因此直接使用子集的方法会得出相同子集,需要过滤。 对于数组[2,3,3],相同子集就是第1位、第2位组成的集合和第1位、第3位组成的集合。观察规律, 如果相邻的两个数相等,则其中一个数不在子集中,另一个数在子集中的时候,就会出现相同子集。 所以,可以针对这种情况过滤,实现上,先对数组进行排序,然后依次添加子集,如果当前位置的数 和前一个数相等,并且前一个数不在当前子集里,则认为当前子集会和之前的子集相等,则不加入答案。 代码 class Solution { public: