- 浏览: 184674 次
- 性别:
- 来自: 济南
文章分类
最新评论
在位运算这篇文章中已经介绍了关于位运算的一些知识,这里主要介绍leetcode中出现的有关位运算的题目。
有关找单独元素的有三道题,要求空间复杂度为O(n),空间复杂度为O(1),我们都可以通过位运算来解决。
1,Single Number
给定一个数组,每个元素都出现了两次,只有一个元素出现了一次,找出这个元素.
我们将所有的元素进行异或操作,最终的结果就是单独的元素,相同元素异或为0. 代码如下:
2,Single Number II
给定一个数组,每个元素都出现了三次,只有一个元素出现了一次,找出这个元素。
我们将数组中每个元素都按位操作,通过一个长度为32的数组记录每个位置上1的个数,然后通过与3取余,结果就为单独的元素。代码实现如下:
3,Single Number III
给定一个数组,每个元素都出现了两次,有两个元素只出现了一次,找出这两个元素。
解决这道题的办法是我们将数组中所有元素进行异或操作,得到一个数字,这个数字为1的位置,代表要找的两个数在这个位置的数字不同,肯定一个为0,一个为1。我们可以取其中一个1,将数组元素依次与它位与&,结果为0的分到一组,结果为1的分到一组,这样我们可以把数组划分为两部分,这两个数分别在不同的组,具体代码实现如下:
4,Missing Number
给定一个包含n个数的不含重复元素的数组,元素的范围为0....n,找出数组没有包含的那个元素。
例如:给定 nums[] = {0, 1, 3} 输出:2
将数组里的元素异或,再将结果与0....n异或,结果就是缺少的元素。代码如下:
接下篇 Bit Manipulation总结(二)
有关找单独元素的有三道题,要求空间复杂度为O(n),空间复杂度为O(1),我们都可以通过位运算来解决。
1,Single Number
给定一个数组,每个元素都出现了两次,只有一个元素出现了一次,找出这个元素.
我们将所有的元素进行异或操作,最终的结果就是单独的元素,相同元素异或为0. 代码如下:
public class Solution { public int singleNumber(int[] nums) { int result = 0; for(int i = 0; i < nums.length; i++) { result ^= nums[i]; } return result; } }
2,Single Number II
给定一个数组,每个元素都出现了三次,只有一个元素出现了一次,找出这个元素。
我们将数组中每个元素都按位操作,通过一个长度为32的数组记录每个位置上1的个数,然后通过与3取余,结果就为单独的元素。代码实现如下:
public class Solution { public int singleNumber(int[] nums) { int[] digits = new int[32]; int result = 0; int mask = 1; for(int i = 0; i < 32; i++) { for(int j = 0; j < nums.length; j++) { if((mask & (nums[j] >> i)) == 1) { digits[i] ++; } } result |= (digits[i] % 3) << i; } return result; } }
3,Single Number III
给定一个数组,每个元素都出现了两次,有两个元素只出现了一次,找出这两个元素。
解决这道题的办法是我们将数组中所有元素进行异或操作,得到一个数字,这个数字为1的位置,代表要找的两个数在这个位置的数字不同,肯定一个为0,一个为1。我们可以取其中一个1,将数组元素依次与它位与&,结果为0的分到一组,结果为1的分到一组,这样我们可以把数组划分为两部分,这两个数分别在不同的组,具体代码实现如下:
public class Solution { public int[] singleNumber(int[] nums) { int helper = 0; for(int i = 0; i < nums.length; i++) { helper ^= nums[i]; } int tell = helper & (~(helper - 1)); int single1 = 0; int single2 = 0; for(int j = 0; j < nums.length; j++) { if((nums[j] & tell) == 0) single1 ^= nums[j]; else single2 ^= nums[j]; } int[] result = {single1, single2}; return result; } }
4,Missing Number
给定一个包含n个数的不含重复元素的数组,元素的范围为0....n,找出数组没有包含的那个元素。
例如:给定 nums[] = {0, 1, 3} 输出:2
将数组里的元素异或,再将结果与0....n异或,结果就是缺少的元素。代码如下:
public class Solution { public int missingNumber(int[] nums) { int result = 0; for(int i = 0; i < nums.length; i++) { result ^= i ^ nums[i]; } return result ^ nums.length; } }
接下篇 Bit Manipulation总结(二)
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 269Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 271You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 388Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 378Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 503Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 568Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 482Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 666Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 472The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 432Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 582Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 590Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 429All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 904Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 933Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 606Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 690Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 855Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 788You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 721For a undirected graph with tre ...
相关推荐
前端大厂最新面试题-bit-manipulation.docx 本文档总结了前端大厂的最新面试题,主要集中在位运算方面的知识点。通过对题目的分析,我们可以总结出以下几个方面的知识点: 1. 位运算的基本概念 在计算机科学中,...
`System.loadLibrary("bitmanipulation")`是用来加载本地库的,这里的库名"bitmanipulation"是与C/C++代码中的`.so`文件对应的部分。 接下来,使用`javah`命令生成C语言的头文件(JNI头文件)。在Android Studio的...
13. 对二进制的 1 个数的处理(Bit Manipulation) 对二进制的 1 个数的处理是一种常用的算法,用于处理二进制数中的某一位。该算法广泛应用于计算机科学和信息技术领域。 14. 大数求余(Modular Arithmetic) ...
5. **Bit Manipulation Functions**: `bit bit_variable` 用于声明位变量,`bit_set(bit_variable)`、`bit_clear(bit_variable)` 和 `bit_toggle(bit_variable)` 用于操作位。 在描述中提到的“1时间函数举例4”...
- **DML(Data Manipulation Language)数据操作语言**:用于插入(`INSERT`)、更新(`UPDATE`)、删除(`DELETE`)表中的数据。 - **DQL(Data Query Language)数据查询语言**:主要用于检索数据,最常用的命令是...
### LeetCode练习答案 #### 简介 LeetCode是一个非常受...以上总结仅为部分知识点的简述,对于每一个具体的算法问题,都有其独特的解决思路和技巧,建议深入研究每个问题的具体实现细节,以达到更好的理解和掌握。
SQL(Structured Query Language)语言是一种用于...通过以上这些知识点的总结,初学者可以对SQL语言有一个全面的了解。对于数据库的学习而言,了解这些基础概念和语法规则,能够为后续深入学习和实践打下坚实的基础。
多思考,多总结 刷题顺序参考: Array String Math Tree Backtracking Dynamic Programming LinkedList Binary Search Matrix DFS & BFS Stack & PriorityQueue Bit Manipulation Topological Sort Random Graph ...
`set_bit`, `__set_bit`, `clear_bit`, `__change_bit`, `change_bit`, `test_and_set_bit`, `__test_and_set_bit`, `test_and_clear_bit`, `__test_and_clear_bit`, `test_and_change_bit`, `test_bit`, `find_...
**find_first_zero_bit** 和 **find_next_zero_bit**:查找第一个或下一个零位。 ```c unsigned int index = find_first_zero_bit(bitmap, 32); // 查找第一个零位 index = find_next_zero_bit(bitmap, 32, index + ...
C语言中的位操作(bit manipulation)技巧在此处非常重要,学习者需要了解如何设置、读取和清除单片机寄存器中的特定位来实现数据编码与解码。 3. **中断处理**:单片机通常会利用中断来响应无线接收器接收到的数据...
8. **其他扩展**:还有如BMI(Bit Manipulation Instruction)、FMA(融合乘加)等指令集,分别提供了更高效的位操作和浮点运算。 了解和掌握INTEL指令集对于软件开发、系统编程和优化至关重要。开发者可以通过使用...
- **1.23 颜色的操纵(Manipulation of colors)** - 讨论了在图像处理中颜色值的操作方法。 - **1.24 2-进制逆和平方根(2-adic inverse and square root)** - 介绍了在2-进制数系下计算逆元和平方根的方法。 - ...
位运算(bit_manipulation_items) 数组中出现次数超过一半的数字(More_than_half_of_the_occurrences_in_the_array.java) 二进制中1的个数(The_number_of_1s_in_binary.java) 主要元素(Main_...
2. 位操作(Bit manipulation): - C/C++提供了丰富的位操作符,包括位与(&)、位或(|)、位非(~)、位异或(^)、左移()和右移(>>)等。位操作在处理硬件寄存器、执行效率优化等方面非常有用。 3. 指针和数组: - 在...
- **Bit Manipulation**:AND、OR、XOR等指令用于执行位操作。 #### 四、应用案例分析 假设在一个高性能计算应用中,需要频繁执行浮点数相加运算。使用MIPS64架构的处理器时,可以通过以下步骤优化性能: 1. **...
本节课将对 SQL 的基础知识进行一个全面详细的总结,包括 SQL 语言分类、SQL SERVER 2008 数据分类、用户定义的数据类型等重要知识点。 SQL 语言分类 SQL 语言可以分为三类:DDL、DML 和 DCL。 * DDL(Data ...
#### 位操作(Bit Manipulation) - 包括了位运算的基本操作,例如: - 单一数字的处理(Single Number)。 - 位操作的优化(O1C)等。 以上是对文档中提到的一些基础数据结构、排序算法、编码实践等知识点的详细解释。...
leetcode 100 很棒的采访资源 ...总结:如何使用Bit Manipulation轻松高效地解决问题 最受欢迎的 100 个问题LeetCode 前100 个问题主题明智 PDF 动态编程模式 竞争性编程的专业提示 用于 C++竞争性编程的快速 I/O
- Bit Manipulation(位操作) #### Part II - Coding 这部分涵盖了具体的编程题目及其解决方案,主要针对LeetCode和LintCode上的练习题。 - **String**(字符串处理) - Implement strStr(实现strStr函数) ...