Lintcode570 Find the Missing Number II 题解

【题目描述】

Giving a string with number from 1-n in random order, but miss 1 number.Find that number.

Notice: n <= 30

Example

Given n = 20, str = 19201234567891011121314151618

return 17

给一个由 1 - n 的整数随机组成的一个字符串序列,其中丢失了一个整数,请找到它。

注意:n <= 30

样例

给出 n = 20, str = 19201234567891011121314151618

丢失的数是 17 ,返回这个数。

【题目链接】

www.lintcode.com/en/problem/find-the-missing-number-ii/

【题目解析】

相对好的方法是取中间或者取随机数。

最直接简单的办法,以空间换时间,加一个bool数组再哈希就可以了。

最优雅的法子横空出世 — 异或。两个相同的数异或为0。故而把原数组与0-n异或和就为最后的结果。

借助桶排序。思路是:从0开始遍历到n-1,每次当a[i]!=i的时候,将a[i]与a[a[i]]交换,大于边界的话,就丢掉,直到无法交换位置。那个特殊值有两种情况,一种是在0~n-1之间,那么经过a[i]与a[a[i]]交换,最后以特殊值为下标的位置上一定为n;另一种是特殊值为n,那么a[i]与a[a[i]]交换对于0~n-1都满足。故而只要跟踪边界值n即可,跟踪值x应初始化为n,以对应第二种情况。

【参考答案】

www.jiuzhang.com/solutions/find-the-missing-number-ii/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,790评论 0 33
  • 保证了孩子的物质生活,他们才不会贪婪; 让孩子吃点苦头,他们才懂得谦虚; 让孩子学学音乐美术,孩子懂得了高雅和品味...
    iYY阅读 110评论 0 1
  • 最近北大男生12年不回家,拉黑父母6年的新闻被无数公众号推送,和之前父亲微博寻找拉黑自己,带走300万的18...
    莫米卡阅读 794评论 0 2
  • 我想让所有草地上的争吵 都换成月光 我想让所有上了车的人 都回到起点 我想让所有雨中的等待 都回望到离人的微笑 我...
    孤倚星阅读 211评论 0 4
  • 昨天忙了一整天,上班到晚上九点,尽管很累,但几个问题的解决方案基本上定下来了,也有点小开心。有方案了,推进就快了。...
    山谷和百合阅读 264评论 0 0