【python-面试题53-循环排序】寻找缺失的数

问题描述:

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

示例 1:

输入: [0,1,3]
输出: 2
示例 2:

输入: [0,1,2,3,4,5,6,7,9]
输出: 8

循环排序思想:一般可用循环排序解决的问题是:数值一般在一个区间,且是要你在排好序/翻转过的数组中寻找丢失的/重复的/最小的元素。

例如:

a = [6,2,4,3,1,5]
for k,v in enumerate(a):
    if a[k] != v-1:
        a[k],a[v-1] = a[v-1],a[k]
print(a)

如果当前元素不是在其应该的位置上,则交换该元素和在其应该位置上的元素,一趟之后整个数组就是有序的了

接下来解决这一题:

class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        for i,j in enumerate(nums):
            if i != j:
                return i
        return len(nums)

注意,可能返回的是最后一个元素。

结果:

原文地址:https://www.cnblogs.com/xiximayou/p/12358470.html

时间: 2024-10-12 17:57:55

【python-面试题53-循环排序】寻找缺失的数的相关文章

lintcode 中等题:find the missing number 寻找缺失的数

题目 寻找缺失的数 给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数. 样例 N = 4 且序列为 [0, 1, 3] 时,缺失的数为2. 注意 可以改变序列中数的位置. 挑战 在数组上原地完成,使用O(1)的额外空间和O(N)的时间. 解题 重新定义一个数组存放排序后的数,空间复杂度和时间复杂度都是O(N) public class Solution { /** * @param nums: an array of integers * @retur

[LintCode] 寻找缺失的数

1 class Solution { 2 public: 3 /** 4 * @param nums: a vector of integers 5 * @return: an integer 6 */ 7 int findMissing(vector<int> &nums) { 8 // write your code here 9 int n = nums.size(); 10 int number = 0; 11 for (int i = 0; i <= n; i++) 1

[中等]寻找缺失的数

题目来源:http://www.lintcode.com/zh-cn/problem/find-the-missing-number/ C++版 VS2012测试通过: 1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 using namespace std; 5 6 //方法1 7 class Solution { 8 public: 9 /** 10 * @param nums: a

python公司面试题集锦 python面试题大全

问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x 答案 以上代码的

Python面试题整理-更新中

几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路人甲的回答 如何学习Python爬虫[入门篇] - 学习编程 - 知乎专栏 Python常用库整理 - 学习编程 - 知乎专栏 学好Python的11个优秀资源 - 学习编程 - 知乎专栏 在开头依然推荐一个Python面试题整理比较好的网站:GitHub : 关于Python的面试题.同样推荐几道

Python面试题汇总

原文:http://blog.csdn.net/jerry_1126/article/details/44023949 拿网络上关于Python的面试题汇总了,给出了自认为合理的答案,有些题目不错,可以从中学到点什么,答案如不妥,请指正...... +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ [题目:001]| 说说你对zen of python的理解,你有什么办法看到它? Python之禅,Python秉承一种独特

python面试题(转)

1.How are arguments passed – by reference of by value? 2.Do you know what list and dict comprehensions are? Can you give an example? 3.What is PEP 8? 4.Do you use virtual environments? 5.Can you sum all of the elements in the list, how about to multu

Python面试题 —— 获取列表中位数

中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位数.在这个任务里,你将得到一个含有自然数的非空数组(X).你必须把它分成上下两部分,找到中位数. 输入: 一个作为数组的整数(int)列表(list)的. 输出: 数组的中位数(int, float). 范例: get_median([1, 2, 3, 4, 5]) == 3 get_median(

python 面试题

前段时间面试碰到的一组python面试题,虽然很简单但是特别的基础. 1.Python 如何判断二维数组中是否包含整数? array = [[1, 3, 5.6, 7.2, 8, 9.9], [2.5, 4.7, 6.8, 7.3, 9, 10], [3.7, 6.7, 9.8, 9.9, 11, 12.1]] for i in array: for j in i: if str(j).isdigit(): # 判断是否是整数还可以通过isinstance(j, int) print("二维列表