Single Number
来源:互联网 发布:python 中国地图 编辑:程序博客网 时间:2024/05/29 09:07
Single Number
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Hash Table Bit Manipulation
错误做法 -> O(N^2) 超时
int singleNumber(vector<int>& nums) { for(int i=0; i<nums.size(); i++){ for(int j=0; j<nums.size(); j++){ if(nums[i] == nums[j]) continue; if(j == nums.size()) <span style="white-space:pre"></span> return nums[i]; } } }换思路:要使复杂度:O(n),可在循环外加循环。(不能在一个n循环里面添加任何循环),如下:
int singleNumber(vector<int>& nums) { int n = nums.size(); int arr[1000]; for(int i=0; i<n; i++) arr[i] = nums[i];//vector<int>转换成int数组 int count = 0; //极端 if(n == 0) {return -1;}//容器为空,不要返回0 if(n == 1) {return nums[0];}//单数在第一个 return nums[n-1];//单数在最后一个 sort(arr,arr+n);//排序 for(int i = 0; i<n-1; i++){ if(nums[i] == nums[i+1]) count++; else{ if(count == 0) return nums[i]; count = 0; } } }最终还是【显示超时】,肯能是在把vector<int>转换成int数组的这个环节上消耗了时间导致。
换思路:vector自带【begin和end】函数。成功解决超时:
int singleNumber(vector<int>& nums) {int n = nums.size();int i = 0;sort(nums.begin(), nums.end());//排序/*if(n == 1) 最后一个元素查不到 return nums[0];*/for (int i = 0; i<n - 1; i += 2){if (nums[i] != nums[i + 1]) return nums[i];}return nums[n-1];}
换思路:用【位运算】的思想合理解决了超时问题。
两相等的数 亦或 得0,最终肯定可以得到一个单数。时间复杂度也为O(N) :
class Solution {public: int singleNumber(vector<int>& nums) { int n = nums.size(); int temp = nums[0]; if(n == 0){ return 0; } for(int i=1; i<n; i++){ temp = temp^nums[i]; } return temp; }};
0 0
- Single Number
- single number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- single number
- Single Number
- Single Number
- Single Number
- Swift学习:5.断言
- DBA需要掌握的shell知识
- 继承已有对象创建新对象
- Pentest for kali-linux-Tomcat
- Java中的 WeakReference 和 SoftReference
- Single Number
- android访问php webservice简单一例
- 在linux Mint下架设流媒体服务器的经验
- JS之clientX,clientY,screenX,screenY,offsetX,offsetY区别测试
- 携手时间,靠近梦想——番茄工作法使用分享
- SDWebImage
- 数据流重定向
- 机器学习十大经典算法 (收集)
- uva 514 铁轨(栈)