【算法】(遇到的问题)给定一个数组,找出不在数组中的最小的那个数字

本文记录了一道算法题的解题过程,即在给定数组中找到不在数组中的最小数字。作者通过多次探索,发现了原算法存在的问题,并提供了修正后的代码,以确保正确找出缺失的数字。
摘要由CSDN通过智能技术生成

算法题:找出不在数组中的最小的那个数字所遇到的问题



一切的源头

一切都源于一个题目:给定一个数组,找出不在数组中的最小的那个数字。这是原文链接
同学问我,说这篇文章里的第5种解法,他实现了可是却得不到正确的结果,于是我去阅读了该文章,这篇文章的思路真的很巧妙,文章也写的很明白,然后我也去试着实现了第5种算法,过程中也遇到了很多问题,不过最后也都解决了,在这里做一下记录。

初次探索

首先要注意两点:
1. 数组的下标是从1开始的
2. 数组中没有重复的元素

先描述一下原文作者的思路:
首先取1~n的中间值m=(1+n)/2,然后利用快拍中的partition函数的思想将整个数组分成2部分。
A1中都是小于或等于m的数字,A2中都是大于m的数字。
如果A1的长度小于m,那么说明缺少的数字应该出现在A1中,否则在A2中,具体推导过程作者说的很详细,这里就不在赘述了。
以下是作者的代码:

MIN-AVAILABLE-NUM(A, low, up)
  if(low == up) return low
  m = (low + up) / 2
  split = partition(A, low, up, m)
  if a[split] == m 
     then return MIN-AVAILABLE-NUM(A, low, split)
    else return MIN-AVAILABLE-NUM(A, split+1, up)

这个思路是没有问题的,但是都存在一点小问题,一会在讨论,因为当时我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值