算法创作 | 0到n-1中缺失的数字问题解决方法

简介: 算法创作 | 0到n-1中缺失的数字问题解决方法

问题描述

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0n-1之内。在范围0n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

示例1:

输入:[0,1,3]

输出:2

示例2

输入:[0,1,2,4]

输出:3

解决方案

左边界i=0,右边界j=len(nums)-1;闭区间[i,j]。当ij时开始循环(即当闭区间[i,j]为空时跳出循环;计算中点m=(i+j)//2,其中"//"为向下取整除法;若nums[m]=m,则“右子数组的首位元素”一定在闭区间[m+1,j]中,便执行i=m+1;若nums[m]=m,则左子数组末位元素”一定在闭区间[i,m1]中,因此执行j=m1;跳出时,变量ij分别指“右子数组的首位元素”“左子数组的末位元素”,返回i

代码清单 1 0~n-1中缺失的数的代码清单

class Solution:

    def missingNumber(self, nums: List[int]) -> int:

        i, j = 0, len(nums) - 1

        while i <= j:

            m = (i + j) // 2

            if nums[m] == m: i = m + 1

            else: j = m - 1

        return i

运行代码

 


结语

首先看到此题,想到的第一种方法便是二分法,当然,此题也有一些其他的办法,只是二分法更加常用,更容易想到,可以根据规则将数组划分为左子数组和右子数组两部分,根据缺失的数字为右子数组的首位元素作为对应的索引,便可得到所缺失的数。

目录
相关文章
|
存储 算法 程序员
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(下)
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(下)
65 0
|
算法 Java C语言
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(上)
【五一创作】C++程序设计与算法(一) 北京大学 郭炜
134 0
|
9月前
|
算法 C语言
C语言----判断n是否是2的次方数,利用到按位与&,算法n&(n-1)
C语言----判断n是否是2的次方数,利用到按位与&,算法n&(n-1)
98 2
|
9月前
|
算法 Java
Java数据结构与算法:冲突解决方法
Java数据结构与算法:冲突解决方法
|
算法 Python
算法创作|规则数列计算解决方法
算法创作|规则数列计算解决方法
92 2
|
算法
算法创作|神奇语言问题解决方法
算法创作|神奇语言问题解决方法
83 1
|
算法 C语言
C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n-1
思路一:普通方法 (逻辑简单,在无序数组中也可以使用,但效率较低,需要逐个查找) 总体思路:
122 0
|
5天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
|
4天前
|
资源调度 算法 数据可视化
基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF
本项目基于MATLAB2022A实现IEKF迭代扩展卡尔曼滤波算法的数据跟踪仿真,对比EKF和UKF的性能。通过仿真输出误差收敛曲线和误差协方差收敛曲线,展示三种滤波器的精度差异。核心程序包括数据处理、误差计算及可视化展示。IEKF通过多次迭代线性化过程,增强非线性处理能力;UKF避免线性化,使用sigma点直接处理非线性问题;EKF则通过一次线性化简化处理。
|
5天前
|
算法 数据安全/隐私保护
基于二次规划优化的OFDM系统PAPR抑制算法的matlab仿真
本程序基于二次规划优化的OFDM系统PAPR抑制算法,旨在降低OFDM信号的高峰均功率比(PAPR),以减少射频放大器的非线性失真并提高电源效率。通过MATLAB2022A仿真验证,核心算法通过对原始OFDM信号进行预编码,最小化最大瞬时功率,同时约束信号重构误差,确保数据完整性。完整程序运行后无水印,展示优化后的PAPR性能提升效果。

热门文章

最新文章