single number和变体
裡面有一个数字是单独出现 其他都会出现两次(而且一起出现)
ex: [1,2,2,3,3]
要判断哪个数字是单独出现的.
以这个例子的话就是 1
面试官说有没有不用额外空间的方式
我说 那就用XOR 去算吧 剩下来的那个就是单独出现的了 複杂度是O(N)
面试官说可以,但是希望再想其他方式可以优化的 比如说O(logN)複杂度
看到logN就想到binary serach了
不过一时没有想到怎麽个search法
面试官给了提示才推出来的
结论就是用index是基数或偶数 来判断 search砍半时应该往前找或往后找
//XOR版本
class Solution {
public:
int singleNumber(vector<int>& nums) {
int length = nums.size();
int num = ;
for(int i = ;i < length;i++)
num ^= nums[i];
return num;
}
};
class Solution{
public:
int singleNumber(vector<int>& nums){
return single_core(nums,,nums.size()-);
}
int single_core(vector<int> nums,int start,int end){
if(start == end)
return nums[start];
int length = end - start + ;
int mid = length/;
if((length/)% == ){
if(nums[i] == nums[i-])
return single_core(nums,start,mid);
if(nums[i] == nums[i+])
return single_core(nums,mid,end);
}
else{
if(nums[i] == nums[i-])
return single_core(nums,mid+,end);
if(nums[i] == nums[i+])
return single_core(nums,start,mid-);
}
}
}
偶数:12233、22331
奇数:2233441、1223344
那个单独的数一定是在奇数个中
single number和变体的更多相关文章
- [LeetCode] Single Number III 单独的数字之三
Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...
- 【LeetCode】Single Number I & II & III
Single Number I : Given an array of integers, every element appears twice except for one. Find that ...
- [OJ] Single Number II
LintCode 83. Single Number II (Medium) LeetCode 137. Single Number II (Medium) 以下算法的复杂度都是: 时间复杂度: O( ...
- 实现Promise的first等各种变体
本篇文章主要是想通过ES6中Promise提供的几个方法,来实现诸如first.last.none.any等各种变体方法! 在标准的ES6规范中,提供了Promise.all和Promise.race ...
- 136. Single Number唯一的数字
[抄题]: Given an array of integers, every element appears twice except for one. Find that single one. ...
- 136. Single Number唯一的一个只出现了一次的数字
[抄题]: Given a non-empty array of integers, every element appears twice except for one. Find that sin ...
- [LeetCode] Single Number II 单独的数字之二
Given an array of integers, every element appears three times except for one. Find that single one. ...
- [LeetCode] Single Number 单独的数字
Given an array of integers, every element appears twice except for one. Find that single one. Note:Y ...
- LeetCode Single Number I / II / III
[1]LeetCode 136 Single Number 题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数. 解法:容易想到异或的性质,两个 ...
随机推荐
- python 历险记(六)— python 对正则表达式的使用(上篇)
目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...
- jdk源码->集合->HashMap
一.hash算法 1.1 hash简介 hash,一般翻译为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出值就是散列值,这种转换是一种压缩映射,也就是散列的空间小于输入的空间, ...
- Linux常用基本命令(软链接与硬链接 )
硬链接:相当于文件的多个入口,作用:备份文件,创建快照等 软链接:相当于windows的快捷方式 命令格式: ln option 源文件 目标文件 -s: 创建软链接 1,创建硬链接: ghostwu ...
- php pdo对象使用详解: 连接数据库与exec方法
要使用pdo,首先需要开启pdo扩展,我这里已经开启了mysql的pdo扩展 ghostwu@dev:~$ php -m | grep pdo pdo_mysql ghostwu@dev:~$ 1,连 ...
- linux系统编程:read,write与lseek的综合应用
这个实例根据命令行参数进行相应的读学操作: 用法: usage:./io file {r<length>|R<length>|w<string>|s<offs ...
- 正则表达式 ?P<name>
import re # 将匹配的数字乘以 2 def double(matched): value = int(matched.group('value')) return str(value * 2 ...
- Code Signal_练习题_variableName
Correct variable names consist only of English letters, digits and underscores and they can't start ...
- instanceof与constructor的区别
名词介绍 instanceof 的作用是判断实例对象是否为构造函数的实例,实际上判断的是实例对象的__proto__属性与构造函数的prototype属性是否指向同一引用: constructor 的 ...
- vue-scroller记录滚动位置
问题描述: 列表页进入详情页,或者tab页切换,然后再返回列表页,希望能切换到之前滚动位置 解决问题思路: 切换到其他页面前记录位置,返回列表页的时候返回位置.这就需要借助vue-router的bef ...
- 【代码笔记】iOS-UIActionSheet字体的修改
一,效果图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...