如果计算机有什么基础知识,那么位运算和二进制一定首当其冲,位运算在目前的面对对象编程中并不算很重要,可在汇编中是极其重要的一个知识。
先简单了解一下位运算,
常见的位运算有哪些:
今天我们主要使用异或运算,简单的介绍一下异或运算。
运算规则:相同为0,不同为0。
N ^ 0 = N
N ^ N = 0
a ^ b = b ^a
(a ^ b) ^ c = a ^ (b ^ c)
好,那么我们就用这几个性质做一道题。
136只出现一次的数字
给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例 1 :
输入:nums = [2,2,1]
输出:1
示例 2 :
输入:nums = [4,1,2,1,2]
输出:4
示例 3 :
输入:nums = [1]
输出:1
class Solution { public int singleNumber(int[] nums) { int res = 0; for (int i = 0 ; i < nums.length; i ++) {res^= nums[i]; } return res ; } }
非常巧妙的方法,当然如果在工作中不是极致要求代码运算的速度,还是不建议使用位运算的,降低代码可读性。容易被架构师喷。