电子创意设计网站,固始网站建设公司,免费网站开发平台,公司网站备案申请LeetCode 136. 只出现一次的数字
题目描述
给定一个非空整数数组#xff0c;除了某个元素只出现一次以外#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题#xff0c;且该算法只使用常量额外空间。
…LeetCode 136. 只出现一次的数字
题目描述
给定一个非空整数数组除了某个元素只出现一次以外其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题且该算法只使用常量额外空间。
示例 1:
输入: [2,2,1]
输出: 1示例 2:
输入: [4,1,2,1,2]
输出: 4Java 实现代码
class Solution {public int singleNumber(int[] nums) {int result 0;for (int num : nums) {result ^ num;}return result;}
}解题思路 利用异或运算的性质来解决这个问题。异或运算满足以下性质 任何数和0异或等于它本身。任何数和其自身异或等于0。异或运算满足交换律和结合律。 由于数组中除了一个元素出现一次其他元素均出现两次我们可以将所有元素进行异或运算。出现两次的元素在异或运算中会相互抵消最终剩下的就是只出现一次的元素。 复杂度分析 时间复杂度O(n)其中 n 是数组的长度。只需要遍历数组一次。空间复杂度O(1)不需要额外的空间。 举例说明执行过程 假设数组为 [4,1,2,1,2]。 初始化 result 0。遍历数组执行异或运算 result 0 ^ 4 4result 4 ^ 1 5result 5 ^ 2 7result 7 ^ 1 6result 6 ^ 2 4 最终 result 4这是只出现一次的元素。 因此数组 [4,1,2,1,2] 中只出现一次的元素是 4。