1. 有序数组中的缺失元素
给出一个有序数组 A
,数组中的每个数字都是 独一无二的,找出从数组最左边开始的第 K
个缺失数字。
示例 1:
输入:A = [4,7,9,10], K = 1
输出:5
解释:
第一个缺失数字为 5 。
示例 2:
输入:A = [4,7,9,10], K = 3
输出:8
解释:
缺失数字有 [5,6,8,...],因此第三个缺失数字为 8 。
示例 3:
输入:A = [1,2,4], K = 3
输出:6
解释:
缺失数字有 [3,5,6,7,...],因此第三个缺失数字为 6 。
提示:
1 <= A.length <= 50000
1 <= A[i] <= 1e7
1 <= K <= 1e8
思路:首先计算差遍历列表计算两个相邻元素的差值,判断中间缺少的个数是否大于k。是的话直接输出,不是的话将k-减去这里缺省的个数就行。另外注意下示例3的情况。列表最后一个元素的值直接加上k即可。
int missingElement(int* nums, int numsSize, int k) {
int t;
for(int i=0;i<numsSize-1;i++)
{
t=nums[i+1]-nums[i]-1;
if(t>=k)
return nums[i]+k;
else
k-=t;
}
return nums[numsSize-1]+k;
}
4. 有效子数组的数目
给定一个整数数组 A
,返回满足下面条件的 非空、连续 子数组的数目:
子数组中,最左侧的元素不大于其他元素。
示例 1:
输入:[1,4,2,5,3] 输出:11 解释:有 11 个有效子数组,分别是:[1],[4],[2],[5],[3],[1,4],[2,5],[1,4,2],[2,5,3],[1,4,2,5],[1,4,2,5,3] 。
示例 2:
输入:[3,2,1] 输出:3 解释:有 3 个有效子数组,分别是:[3],[2],[1] 。
示例 3:
输入:[2,2,2] 输出:6 解释:有 6 个有效子数组,分别为是:[2],[2],[2],[2,2],[2,2],[2,2,2] 。
提示:
1 <= A.length <= 50000
0 <= A[i] <= 100000
思路:暴力法,遍历数组,注意内循环时判断当前元素是否大于此序列第一个元素即nums[i]. Python超时了嘿嘿,换c就过了。
int validSubarrays(int* nums, int numsSize) {
int sum=0;
for(int i=0;i<numsSize;i++)
{
for(int j=i;j<numsSize;j++)
{
if(nums[i]<=nums[j])
sum++;
else break;
}
}
return sum;
}