数字游戏 -- 寻找缺失的数字

算法专题导航页面


【算法专题 - 应用场景】

  1. 数字游戏 – 寻找缺失的数字
  2. 数字游戏 – 微信红包
  3. 寻找两个排序数组(长度相等)的上中位数

【题目】
   程序猿小明来自于一个游牧家庭,家里有一个大大的牧场和成群结队的牛羊,为了便于管理羊群,小明决定对每只绵羊进行编号标记,最终刚好用完100个号码(1-100)。小明的日常生活简单的有点枯燥:写代码,放牧,放牧的同时写代码!
如此,日复一日,年复一年,时间过得很快很快!
  有一天,临近傍晚收工时候,小明突然发现少了一只绵羊,但是无法确定是哪一只?
  时间紧,任务重,你能否帮忙提供一种方法,能够尽快找出丢失的是哪一只绵羊?

【其他限制】
  无。

【分析】
  100只绵羊各不相同,都有自身的唯一编号。故此题可以转化为:现有99个不重复的正数,其范围是1-100,如何找出不存在的那一个正数?

【解决方案】
  假定用arrayInt[99]来容纳上述99个不重复元素。

  1. 时间复杂度O(nlogn),空间复杂度O(1)
    a. 采用某种时间复杂度为O(nlogn)的排序算法对99个正数排序(升序)得到有序数组arrayIntSorted[];
    b. 对有序数组arrayIntSorted[]元素执行操作:arrayIntSorted[j] - arrayIntSorted[i] (j > i),一旦差值大于1,即表明缺失的数字介于元素arrayIntSorted[i]与arrayIntSorted[j]之间。也即缺失的数字为:arrayIntSorted[i] + 1 或者 arrayIntSorted[j] - 1。
  2. 时间复杂度O(1),空间复杂度O(n)
    a. 采用哈希表的方式,申请长度为100的辅助空间,以编号1-100为键,初始状态哈希表所有元素值都为1。也即假设所有的100个数字都存在。
    b. 遍历上述99个不重复元素,一旦相应的键存在,则删除该键。最终哈希表中剩下的那一个键即为缺失的数字。
  3. 时间复杂度O(1),空间复杂度O(1)
    仔细考虑,此问题是一个局部与整体问题:局部 + 缺失数字 = 整体。至此,答案一目了然。有点脑筋急转弯的意思~??
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值