算法创作 | 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

运行代码

 


结语

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

目录
相关文章
|
7月前
|
存储 算法 程序员
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(下)
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(下)
29 0
|
7月前
|
算法 Java C语言
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(上)
【五一创作】C++程序设计与算法(一) 北京大学 郭炜
45 0
|
11月前
|
算法 Python
算法创作|规则数列计算解决方法
算法创作|规则数列计算解决方法
50 2
|
11月前
|
算法
算法创作|神奇语言问题解决方法
算法创作|神奇语言问题解决方法
51 1
|
11月前
|
算法 Python
算法创作|找出游戏的获胜者问题解决方法
算法创作|找出游戏的获胜者问题解决方法
99 0
|
11月前
|
算法
算法创作 | 二叉树遍历问题解决方法
算法创作 | 二叉树遍历问题解决方法
51 0
|
11月前
|
算法 索引
算法创作|烂头背枪双人情况游戏随机模拟
算法创作|烂头背枪双人情况游戏随机模拟
154 0
|
12天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
2天前
|
算法 数据安全/隐私保护 计算机视觉
基于DCT变换的彩色图像双重水印嵌入和提取算法matlab仿真
**算法摘要:** - 图形展示:展示灰度与彩色图像水印应用,主辅水印嵌入。 - 软件环境:MATLAB 2022a。 - 算法原理:双重水印,转换至YCbCr/YIQ,仅影响亮度;图像分割为M×N块,DCT变换后嵌入水印。 - 流程概览:两步水印嵌入,每步对应不同图示表示。 - 核心代码未提供。
|
2天前
|
机器学习/深度学习 算法 数据可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
10 0