LeetCode#136. Single Number
来源:互联网 发布:网络教育怎么样 编辑:程序博客网 时间:2024/06/15 14:44
- 题目:一个数组中,只有一个元素只出现一次,其余元素都出现两次,找出出现一次的这个元素(时间复杂度要求为o(logn) 空间复杂度要求为o(1))
- 难度:Easy
思路:
- 方法一:先将数组排序,然后通过二分查找来找到single number,有序数组查找single number:LeetCode#540
方法二:通过位运算来找出single number(这个方法实在神奇)
0 ^ N = NN ^ N = 0 那么N1 ^ N1 ^ N2 ^ N2 ^..............^ Nx ^ Nx ^ N= (N1^N1) ^ (N2^N2) ^..............^ (Nx^Nx) ^ N= 0 ^ 0 ^ ..........^ 0 ^ N= N
代码:
方法一的代码实现
public class Solution { public int singleNumber(int[] nums) { if(nums == null || nums.length == 0){ return -1; } int len = nums.length; //len为1的情况需要单独考虑 if(len == 1){ return nums[0]; } Arrays.sort(nums); int left = 0; int right = len-1; while(left <= right){ int mid = left + (right-left); if(mid == 0){ if(nums[mid] == nums[mid+1]){ left = 3; }else{ return nums[mid]; } }else if(mid == len-1){ if(nums[mid] == nums[mid-1]){ right = len-3; }else{ return nums[mid]; } }else{ //看mid位置的值和两边的值是否相等 if(nums[mid] != nums[mid-1] && nums[mid] != nums[mid+1]){ return nums[mid]; }else if(nums[mid] == nums[mid-1]){ if(mid%2 == 1){ left = mid+1; }else{ right = mid-2; } }else{ if(mid%2 == 1){ right = mid-1; }else{ left = mid+2; } } } } return nums[right]; }}
位运算的代码实现
public class Solution { public int singleNumber(int[] nums) { if(nums == null || nums.length == 0){ return -1; } Arrays.sort(nums); int result = nums[0]; int len = nums.length; for(int i = 1; i < len; i++){ result ^= nums[i]; } return result; }}
阅读全文
0 0
- LeetCode 136. Single Number
- [Leetcode] 136. Single Number
- LeetCode 136. Single Number
- 【leetcode】136. Single Number
- 【LeetCode】136. Single Number
- Leetcode 136. Single Number
- leetcode 136. Single Number
- leetcode 136. Single Number
- 136. Single Number LeetCode
- LeetCode 136. Single Number
- LeetCode 136. Single Number
- [LeetCode]136. Single Number
- LeetCode 136. Single Number
- LeetCode *** 136. Single Number
- [LeetCode]136. Single Number
- LeetCode--136. Single Number
- 【leetcode】136. Single Number
- leetcode-136. Single Number
- 18 java IO
- Ajax--带进度条的文件上传
- Servlet的API(生命周期)
- 19 枚举类型
- 使用SeleniumWebDriver开始自动化-简单示例
- LeetCode#136. Single Number
- 发布 Victor 串口控件 1.5.0.6 VCL/FMX for C++ Builder 5 ~ 10.2 Tokyo 全系列版本
- *** 喵哈哈村的几何大师╰☆莣メ誋こ月
- SpringMVC下删除一条数据后重新加载当前页面(已实现分页功能)
- docker
- 启动tomcat服务器,为何要配置CATALINA_HOME和JAVA_HOME ?
- IDEA+MAVEN+spring boot使用springloaded笔记
- X86 XCHG指令详解
- C++学习:动态内存分配对象的new/delete运算符与函数malloc/free