当前位置: 首页 > news >正文

【C++刷题】力扣-#268-丢失的数字

题目描述

给定一个包含从 1 到 n 的整数的数组 nums,其中 n 是数组的长度。数组中的元素都不相同,但是缺失了一个数字,导致数组和为 n*(n+1)/2 减去的某个数字。找出这个缺失的数字。

示例

示例 1

输入: nums = [3,0,1]
输出: 2

示例 2

输入: nums = [0,1,3]
输出: 2

示例 3

输入: nums = [9,6,4,2,3,5,7,0,1]
输出: 8

题解

这个问题可以通过数学公式来解决。根据等差数列求和公式,我们知道从 1 到 n 的整数和为 n*(n+1)/2。因此,我们可以通过计算数组中所有数字的和,然后从总和 n*(n+1)/2 中减去这个值来找到缺失的数字。

  1. 计算总和:计算数组 nums 中所有数字的和。
  2. 计算缺失的数字:使用公式 n*(n+1)/2 - sum 来计算缺失的数字,其中 n 是数组的长度,sum 是数组中数字的和。
  3. 返回结果:返回计算出的缺失数字。

代码实现

int missingNumber(vector<int>& nums) {int n = nums.size();int totalSum = n * (n + 1) / 2;int arraySum = 0;for (int num : nums) {arraySum += num;}return totalSum - arraySum;
}

复杂度分析

● 时间复杂度:O(n),其中 n 是数组 nums 的长度。我们需要遍历一次数组来计算和。
● 空间复杂度:O(1),因为我们只使用了常数个额外变量。
这个算法的优势在于它的时间效率较高,只需要一次遍历即可找到缺失的数字,且不需要额外的存储空间。


http://www.mrgr.cn/news/53677.html

相关文章:

  • MySQL关于DAYOFWEEK和WEEKDAY说明
  • qt/c++中成员函数返回成员变量并且可以赋值
  • 小白对时序数据库的理解
  • DirectX11:Position Based Fluid
  • 深度学习(一)基础:神经网络、训练过程与激活函数(1/10)
  • Python面向对象编程
  • 你是否真的弄懂了 OAuth 2.0?
  • 【C++篇】类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
  • 从头预训练一只迷你 LLaMA 3_llama3 预训练预处理
  • 电影评论网站开发:Spring Boot技术指南
  • 人工智能研究创造出新型蛋白质
  • Redis数据持久化机制详解
  • 中国商飞社招校招前程无忧智鼎题库:IQCAT思维能力测验真题通关技巧
  • linux卸载数据库(最为完整的卸载方式)
  • RabbitMQ如何保证消息不丢失?
  • FFmpeg源码:av_sat_add64_c、av_sat_sub64_c函数分析
  • 外星人木乃伊---我的收藏
  • 《月光下的约定》
  • CVTE Android面试题及参考答案(100道题)
  • 使用exe4j打包jar包生成exe文件,GUI应用详细使用教程
  • 【YOLOv10改进[损失函数]】使用结合InnerIoU和Focaler的各种损失函数助力YOLOv10更优秀
  • 智慧钢厂可视化平台:钢铁生产的数字化转型
  • sentinel原理源码分析系列(六)-统计指标
  • 活着就好20241019
  • linux安装mysql数据库(最完整的yum源安装)
  • leetcode hot100 之【LeetCode 42. 接雨水】 java实现