645. Set Mismatch挑出不匹配的元素和应该真正存在的元素
[抄题]:
he 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]
[暴力解法]:
hashset
时间分析:
空间分析:n
[优化后]:
时间分析:
空间分析:1
[奇葩输出条件]:
[奇葩corner case]:
- 把数字1对应到nums[],为了不出现溢出,需要-1
[思维问题]:
[一句话思路]:
为了优化空间,判断重复性时 直接*(-1)
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:

[一刷]:
- 循环中先写退出条件,再写正常条件
[二刷]:
- 标记元素为负数之后,记得需要变回正数才能正常返回
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
为了优化空间,判断重复性时 直接*(-1)
[复杂度]:Time complexity: O(n) Space complexity: O(1)
[英文数据结构或算法,为什么不用别的数据结构或算法]:
[关键模板化代码]:
//for loop, * (-1), res[0]
for (int num : nums) {
if (nums[Math.abs(num) - 1] < 0) {
res[0] = Math.abs(num);
}else {
nums[Math.abs(num) - 1] *= (-1);
}
}
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
287. Find the Duplicate Number 快慢指针可以找重复?不是找中点么
[代码风格] :
class Solution {
public int[] findErrorNums(int[] nums) {
//ini
int[] res = new int[2];
//cc
if (nums == null || nums.length == 0) {
return res;
}
//for loop, * (-1), res[0]
for (int num : nums) {
if (nums[Math.abs(num) - 1] < 0) {
res[0] = Math.abs(num);
}else {
nums[Math.abs(num) - 1] *= (-1);
}
}
//find res[1]
for (int i = 0; i < nums.length; i++) {
if (nums[i] > 0) {
res[1] = i + 1;
}
}
//return
return res;
}
}
645. 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 ...
- 448. Find All Numbers Disappeared in an Array&&645. Set Mismatch
题目: 448. Find All Numbers Disappeared in an Array Given an array of integers where 1 ≤ a[i] ≤ n (n = ...
- 20190129-‘abcdefgh’里面挑出3个字母进行组合,一共有多少组合
一. 百度面试题‘abcdefgh’里面挑出3个字母进行组合,一共有多少组合,要求3个字母中不能有重复的组合,三个字母同时出现的次数只能出现一次,如出现了abc就不能出现cab,bca等 思路: 1. ...
- 【Leetcode_easy】645. Set Mismatch
problem 645. Set Mismatch 题意: solution1: 统计每个数字出现的次数了,然后再遍历次数数组,如果某个数字出现了两次就是重复数,如果出现了0次,就是缺失数. 注意:如 ...
- JS控制语句 编程练习 学生数据,分别是姓名、性别、年龄和年级,接下来呢,我们要利用JavaScript的知识挑出其中所有是大一的女生的的名字哦。
编程练习 在一个大学的编程选修课班里,我们得到了一组参加该班级的学生数据,分别是姓名.性别.年龄和年级,接下来呢,我们要利用JavaScript的知识挑出其中所有是大一的女生的的名字哦. 学生信息如下 ...
- 645. Set Mismatch - LeetCode
Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数 ...
- C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...
- parents([expr]) 取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。
parents([expr]) 概述 取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素).可以通过一个可选的表达式进行筛选.大理石平台检定规程 参数 exprStringV1.0 用于 ...
- leetcode 645. Set Mismatch——凡是要节约空间的题目 都在输入数据上下功夫 不要担心破坏原始的input
The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of ...
随机推荐
- phpcms v9 tags调用方法
{loop $keywords $keyword} <a href="{APP_PATH}index.php?m=content&c=tag&catid={$catid ...
- C# 实现程序只启动一次(总结)
我前面的三篇文章是从网上找到的(如下链接),都说是实现程序只启动一次的功能. C#防止程序多次运行C#检测程序重复运行的函数(可以在多用户登录情况下检测)C# 实现程序只启动一次(多次运行激活第一个实 ...
- rtrim,dirname,魔术常量用法
$str = "Hello World!!!"; echo $str . "<br>"; echo rtrim($str,"!d" ...
- YII框架安装过程-数据库访问
1.电脑上原来安装了phpstudy.关掉phpstudy,启动wamp,虽启动成功,但仍然无法使用phpmyadmin登录数据库管理页面. 2.查看到系统服务有mysql服务,检查属性均为emsoa ...
- flask之redis
redis 连接需要host port passwod Hash:key-fields-value(做缓存)相当于一个key对于一个map,map中还有key-valueList:有顺序可重复(处理不 ...
- composer的安装和使用 学习日志
如果你做为一个phper,没有用过composer,那你真的不是一个合格的开发者.那么就来记录一下composer的学习日志 下面分享几个学习源头: composer中文网站:https://www. ...
- git 基本操作 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000
1.创建版本库 (即仓库 repository)简单理解为一个目录,这个目录里的所有文件都可以被git管理起来,每个文件的修改删除,git都能跟踪,一边任何时刻都可以追踪历史,或者在将来某个时刻可以 ...
- CAN总线应用
CAN总线的应用 1.汽车制造中的应用 应用CAN总线,可以减少车身布线,进一步节省了成本,由于采用总线技术,模块之间的信号传递仅需要两条信号线.布线局部化,车上除掉总线外其他所有横贯车身的线都不再需 ...
- jenkins获取测试报告展示的方法
1.写好了可以生成报告的python文件 2.在jenkins里下载 HTML Publisher plugin 插件 系统管理--管理插件--选择[可选插件]tab---搜索HTML Publis ...
- Netty实现简单HTTP服务器
netty package com.dxz.nettydemo.http; import java.io.UnsupportedEncodingException; import io.netty.b ...