题目链接:https://leetcode-cn.com/problems/missing-number/

前言:相对简单的一道题。

一. 函数学习

1.数组排序(升序)。

import java.util.Arrays;
Arrays.sort(nums);

2.哈希集合定义及添加元素。

/*初始化哈希集合*/
Set<Integer> set = new HashSet<Integer>();
/*向集合中添加元素*/
set.add(nums[i]);

二. 题解思路

本题思路较多,学习后记录如下:

1.最基本的方法是排序后遍历,一旦有空缺就可以返回,没有则返回最后一个元素。该方法时间、空间复杂度都较高。

2.使用哈希集合,可以将时间复杂度降低到 O(n)。

首先遍历数组,将每个元素加入哈希集合,然后依次检查从0到n的每个整数是否在哈希集合中,不在哈希集合中的数字即为丢失的数字。由于哈希集合的每次添加元素和查找元素的时间复杂度都是 O(1),因此总时间复杂度是 O(n)。

3.数学方式。丢失的数字即为0到n全部数字的总和total与数组nums之和arrSum的差。

故只需要将求出total,累加数组求arrSum,再返回它们的差即可。

4.位运算。大意是将int类型的xor=0与数组中每个元素异或,再与0到n这n+1个数进行异或(^),最后得到的就是丢失的数字。此方法空间复杂度仅为O(1),时间复杂度为O(n)。

三. 心得

对于这种类型的题目,应该多思考多练习多总结。

posted on 2022-02-24 16:05  SelmaS  阅读(34)  评论(0编辑  收藏  举报