首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何查找递增连续数组中缺失数字

在一个长度为n递增数组中,数组中元素范围是0 ~ n-1,如何在这个递增连续数组中查找缺失数字? 分析下: 1. 排序数组搜索算法,首先想到就是二分法查找 2....丢失数字之前左子数组:nums[m] = m, 需要找到第一个nums[m] > m数组索引值即可....例如数组nums={0, 1, 2, 3, 4, 6, 7 }, 在索引m=5时,nums[m]>m; 一起看下遍历过程 1....在处理边界值时候,在(i == r)时候,还多需要多遍历一次,向右移动左指针一次. 4. 这时,左指针值便是最后想要值. 所以我们遍历条件为(l<=r),最后左指针位置即为缺失结果值....综上,对于有序数组查找,一般都会使用二分法查找.在查找数据时候,注意左右边界指针移动.以及遍历标记(l<=j)即可.

3.1K21

单调递增数字

单调递增数字 给定一个非负整数N,找出小于或等于N最大整数,同时这个整数需要满足其各个位数上数字是单调递增。当且仅当每个相邻位数上数字x和y满足x <= y时,我们称这个整数是单调递增。...10) * 10 - 1 = 1330 - 1 = 1329 // 第二次循环就是 1300 - 1 = 1299 } return num; }; 思路 整体思路就是将数字当作字符串...,从尾到头逆向遍历一遍,每次比较两位,如果后一个位置上数小于前一个位置上数,那么就将前边数减一,并将后边所有位都变为9,例如当我们遍历到了1323中比较32这个位置上,此时3 > 2符合条件,...通常来说可以把数字作为字符串来遍历处理,上面的题解是使用纯数字方式去做,首先定义i作为标记记录遍历到到位置,之后定义num作为待处理数字,定义循环只要能够继续取出两位数就继续循环,这是循环终止条件...* 10定义到下一位,如果低一位上值大于大于高一位上值,那么就将数值在第i位以后值都变成0,然后减1即可达到上述将此位减1以及之后数字都变为9,可以参考上边示例,在循环结束后返回处理数字即可

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    贪心算法:单调递增数字

    738.单调递增数字 给定一个非负整数 N,找出小于或等于 N 最大整数,同时这个整数需要满足其各个位数上数字是单调递增。...(当且仅当每个相邻位数上数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增。)...空间复杂度:O(1) 贪心算法 题目要求小于等于N最大单调递增整数,那么拿一个两位数字来举例。...例如:98,一旦出现strNum[i - 1] > strNum[i]情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98最大单调递增整数...这么说有点抽象,举个例子,数字:332,从前向后遍历的话,那么就把变成了329,此时2又小于了第一位3了,真正结果应该是299。 所以从前后向遍历会改变已经遍历过结果!

    70530

    删除排序数组重复数字 双指针+替换

    给定一个排序数组,在原数组中删除重复出现数字,使得每个元素只出现一次,并且返回新数组长度。 不要使用额外数组空间,必须在原地没有额外空间条件下完成。...样例 给出数组A =[1,1,2],你函数应该返回长度2,此时A=[1,2]。...双指针+替换 双指针加替换,排序好数组就更简单,不用查找,只需比较就可以,这个和移动0那个很像,但是比那个稍微复杂一点,因为不是每个数和0来比较,而是要和替换后最后一个数比较,如果可以用另外一个数组当然更简单...=nums[j]) { nums[j+1]=nums[i]; //这里从第二个数开始替换,第一个数不用替换 j++;...} } nums.resize(j+1); //重构这个数组,这样就只保留前面的j+1个。

    97330

    使用Tensorflow实现数组部分替换

    简单描述一下场景:对于一个二维整型张量,假设每一行是一堆独立数,但是对于每一行数,都有一个设定好最小值。...我们需要做是,对于每一行,找到第一次小于最小值位置,并将该位置起直到行末部分数字替换为0。是不是有点抽象?...对于其他两行来说也是一样操作。 看似很简单?以下实现方案可能比较笨重,如果大家有更好方法,欢迎留言或者私信微信(sxw2251),咱们一起交流!...,经过上面两步,我们已经万事俱备了,接下来,我们要做事,就是根据索引之间大小关系,要么从原数组里面选数,要么选择0。...]] 可以看到,前两行结果是对,但是第三行结果是错,这时候就需要我们刚才得到辅助条件对结果进行修正了: result = tf.where(index<x,choose,tf.zeros_like

    3.7K20

    单调递增数字

    单调递增数字:https://leetcode-cn.com/problems/monotone-increasing-digits/ 一起刷题吧 一、题意分析 输入:非负整数(大于等于0) 输出:...通过上面的推导过程,我们知道需要记录前一位被比较数值,同时还涉及到低位替换为 9 过程,我们可以在遍历过程把低位替换 9 结果保存下来,在需要替换时直接取值即可,参考代码如下: class Solution...result = p # 相当于记录位数 mul = 10 # 记录将每一位替换为 9 之后结果,方便替换时直接取值...但需要注意是,因为涉及到有一个位置会减 1,所以可能出现减 1 之后,与前一位不再是递增关系了,因此当我们找到了第一个不满足递增条件位置后,要从当前位置往前找,找到第一个满足减 1 之后仍然满足递增条件位置...N //= 10 digits = digits[::-1] marker = len(digits) # marker是第一个需要改成9数字

    72620

    单调递增数字

    题目:https://leetcode-cn.com/problems/monotone-increasing-digits 给定一个非负整数 N,找出小于或等于 N 最大整数,同时这个整数需要满足其各个位数上数字是单调递增...(当且仅当每个相邻位数上数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增。)...分析 由于结果要求各位数字单调递增,那么这些数字必然形如 a0a1a2……an (1 <= a0 <= a1 <= a2 <= …… <= an <= 9) 显然有: ----------...a2 - a1) * 111……1 + ………… + (an - an-1) * 1 \-(n-2)个1-/ 可见最终结果必然是若干个形如 11……11 数字相加所得...本题中,最大n为10^9,所以,可以从111111111开始依次累加,如果继续累加将导致结果超过n,则去掉一个1继续循环。总累加次数不超过9次。

    41910

    数组中重复数字

    题目描述 在一个长度为n数组所有数字都在0到n-1范围内。 数组中某些数字是重复,但不知道有几个数字是重复。也不知道每个数字重复几次。请找出数组中任意一个重复数字。...例如,如果输入长度为7数组{2,3,1,0,2,5,3},那么对应输出是第一个重复数字2。 解题思路 最简单就是用一个数组或者哈希表来存储已经遍历过数字,但是这样需要开辟额外空间。...如果题目要求不能开辟额外空间,那我们可以用如下方法: 因为数组数字都在0~n-1范围内,所以,如果数组中没有重复数,那当数组排序后,数字i将出现在下标为i位置。...现在我们重排这个数组,从头到尾扫描每个数字,当扫描到下标为i数字时,首先比较这个数字(记为m)是不是等于i。...如果是,则接着扫描下一个数字;如果不是,则再拿它和m 位置上数字进行比较,如果它们相等,就找到了一个重复数字(该数字在下标为i和m位置都出现了),返回true;如果它和m位置上数字不相等,就把第

    2.1K30
    领券