Leetcode 之 Set Mismatch
645. Set Mismatch
1.Problem
The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of the numbers in the set got duplicated to another number in the set, which results in repetition of one number and loss of another number.
Given an array nums representing the data status of this set after the error. Your task is to firstly find the number occurs twice and then find the number that is missing. Return them in the form of an array.
Example 1:
Input: nums = [1,2,2,4]
Output: [2,3]
Note:
- The given array size will in the range [2, 10000].
- The given array's numbers won't have any order.
2.Solution
题目的大意是原本集合S,包含1到n中的所有数,但1~n中的某个数出现了错误,可以理解为1~n中的某个数x变成了另一个数y,这样集合S中就出现了2个y,且丢失了x,返回数组[x,y]
3.Code
//先找出 出现重复的那个数,再找出缺失的那个数,时间复杂度为O(N),空间复杂度为O(N)
class Solution {
public int[] findErrorNums(int[] nums) {
int[] temp = new int[nums.length + 1];
int[] res = new int[2];
for ( int i = 0 ; i < nums.length ; i++ ) {
if ( temp[nums[i]] == 0 ) {
temp[nums[i]] = 1;
} else {
temp[nums[i]] = 0;
res[0] = nums[i];
}
} for ( int i = 1 ; i <= nums.length ; i++ ) {
if ( temp[i] == 0 && i != res[0] ) {
res[1] = i;
}
}
return res;
}
}
//时间复杂度O(N),空间复杂度O(1)
class Solution {
public int[] findErrorNums(int[] nums) {
int duplicates = 0;
int miss = 0;
for (int i = 0 ; i < nums.length ; i++ ) {
if ( nums[ Math.abs(nums[i]) - 1 ] < 0 ) {
duplicates = Math.abs(nums[i]);
} else {
nums[ Math.abs(nums[i]) - 1 ] *= -1;
}
} for ( int i = 0 ; i < nums.length ; i++ ) {
if ( nums[i] > 0 ) {
miss = i + 1;
}
}
return new int[]{duplicates,miss};
}
}
//时间复杂度O(N),空间复杂度O(1),利用位操作思想,将duplicate和miss找出来,注释已经很详细了,此处不赘述解题思想
class Solution {
public int[] findErrorNums(int[] nums) {
int xor = 0 , xora = 0 , xorb = 0; for ( int i = 0 ; i < nums.length ; i++ ) {
xor ^= nums[i];
} for ( int i = 1 ; i <= nums.length ; i++ ) {
xor ^= i;
}
//xor = duplicates ^ miss;
//想办法从xor中分离出duplicate 和 miss //先从xor中分离出左右的为1的那位,利用这个可以将duplicate和miss分开
int separate = xor & ( ~( xor - 1 ) ); for ( int i = 0 ; i < nums.length ; i++ ) {
if ( (separate & nums[i]) != 0 ) {
xora ^= nums[i]; //此处写xora 还是 xorb都可以,只要跟下面一个循环对应起来就ok
} else {
xorb ^= nums[i];
}
} for ( int i = 1 ; i <= nums.length ; i++ ) {
if ( (separate & i) != 0 ) {
xora ^= i; //跟上面对应
} else {
xorb ^= i;
}
} //此时的xora、xorb 中一个是duplicates,另一个是miss
//如果xora出现在了nums数组中,那其一定是duplicate,反之则是miss
for ( int a : nums ) {
if ( a == xora ) {
return new int[]{xora,xorb};
}
}
return new int[]{xorb,xora};
}
}
Leetcode 之 Set Mismatch的更多相关文章
- LeetCode 645. Set Mismatch (集合不匹配)
The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of ...
- leetcode 645. Set Mismatch——凡是要节约空间的题目 都在输入数据上下功夫 不要担心破坏原始的input
The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of ...
- leetcode算法总结
算法思想 二分查找 贪心思想 双指针 排序 快速选择 堆排序 桶排序 搜索 BFS DFS Backtracking 分治 动态规划 分割整数 矩阵路径 斐波那契数列 最长递增子序列 最长公共子系列 ...
- [LeetCode] Set Mismatch 设置不匹配
The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of ...
- LeetCode算法题-Set Mismatch(Java实现)
这是悦乐书的第279次更新,第295篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第147题(顺位题号是645).集合S最初包含从1到n的数字. 但不幸的是,由于数据错误 ...
- 【LeetCode】645. Set Mismatch 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Hash方法 直接计算 日期 题目地址: https ...
- 645. Set Mismatch - LeetCode
Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数 ...
- C#LeetCode刷题之#645-错误的集合(Set Mismatch)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3887 访问. 集合 S 包含从1到 n 的整数.不幸的是,因为数 ...
- [LeetCode] Find the Duplicate Number 寻找重复数
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...
随机推荐
- Python学习之warn()函数
warn()函数位于warnings模块中,用来发出警告,或者忽略它或引发异常. def warn(message, category=None, stacklevel=, source=None) ...
- opencv读取图像输入到tensorflow模型中进行运算【cpp】
void TransformMatToTensor(const cv::Mat &image, Tensor &input_tensor, int input_width, int i ...
- Yii2 Api认证和授权(翻译)
Authentication 认证 RESTful Api 是无状态的, 因此这意味着不能使用 sessions && cookies. 因此每一个请求应该带有一些 authentic ...
- IOS中的多线程和NSRunLoop概述(转载)
线程概述 有些程序是一条直线,从起点到终点,如Hello World,运行打印完,它的生命周期便结束了:有些程序是一个圆,不断循环,直到将它切断,如操作系统,一直运行直到你关机. 一个运行着的程序就 ...
- [Buzz Today]2013.08.18
# Go 语言实现memcached:groupcache memcached作者Brad Fitzpatrick用Go语言重新实现了memcached. groupcache继承了memcached ...
- ubuntu 终端$换行
编辑~/.bashrc文件 sudo gedit ~/.bashrc 红色部分为添加的 \n if [ "$color_prompt" = yes ]; then PS1= ...
- html input accept类型
在上传文件的时候,需要限制指定的文件类型. <input type="file" accept="image/*" /> accept表示可以上传文 ...
- linux系统web项目运行环境搭建
允许本地访问端口:iptables -P OUTPUT ACCEPT MySQL数据库安装1.yum install mysql 2.yum install mysql-server 3.删除MySQ ...
- iOS-去除NavigationBar边线
解决办法: self.navigationController.navigationBar.barStyle = UIBaselineAdjustmentNone;
- NATS源代码之logger目录
nats的logger目录文件如下 log.go syslog.go syslog_windows.go 基于golang语言的logger包实现日志功能. Golang的log包短小精悍,可以非常轻 ...