leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)

2023-10-24 07:52

本文主要是介绍leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、题目:

函数原型:int missingNumber(int* nums, int numsSize)

二、思路:

思路1

利用“找单身狗”的思路(n^n=0;0^n=n),数组中有0-n的数字,但缺失了一个数字x。将这些数字按位异或0-n所有数字,那么最后的结果为0^x,最终结果就是x。

思路2

先将数组排序(升序),遍历数组,如果前一元素+1 不等于 后一元素,则说明缺失的元素是前一元素+1。但是如果缺失的是0或者n,无法用上述方法解决,需要先判断排序后的首元素和尾元素是否等于0、n;如果不等于,确实的元素就是0或n。

 

思路3

等差数列求和,求0 ~(numsSize+1)的和,再减去数组的所有元素和,差值即为缺失的数字。

三、代码:

代码1

int missingNumber(int* nums, int numsSize)
{int result = 0;for (int i = 0; i < numsSize; i++)//按位与数组中所有数字{result ^= nums[i];}for (int i = 0; i <= numsSize; i++)//按位与0-n所有数字{result ^= i;}return result;
}

代码2

int cmp(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}int missingNumber(int* nums, int numsSize)
{qsort(nums, numsSize, sizeof(int), cmp);if (nums[0] != 0)return 0;else if (nums[numsSize - 1] != numsSize)return numsSize;else{int i = 0;for (i = 0; i < numsSize - 1; i++){if ((nums[i] + 1) != nums[i + 1])return nums[i] + 1;}}
}

代码3

int missingNumber(int* nums, int numsSize)
{int sum = (0 + numsSize) * (numsSize + 1) / 2;for (int i = 0; i < numsSize; i++){sum -= nums[i];}return sum;
}

这篇关于leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/273789

相关文章

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常