2哥 : 叮铃铃,3妹,过年干嘛呢,是不是逛吃逛吃,有没有长胖呢。
3妹:切,我妈张罗着要给我相亲呢。
2哥 : 相亲?哈哈哈哈
3妹:别笑了,我妈说跟我年龄相等的人都已经孩子上小学了,跟她年龄相等的人孙子最少都会打酱油了。
2哥 :哈哈哈哈,让我先笑一会儿
3妹:话说2哥过年在家里也刷题吗?
2哥:当然了,雷打不动。
3妹:好吧,还得是2哥,我有几天懈怠了。
2哥:好吧,说到刷题啊,今天有一道“最小”的题目, 让我们先做一下吧~
给你一个下标从 0 开始的整数数组 nums 。
如果一个前缀 nums[0…i] 满足对于 1 <= j <= i 的所有元素都有 nums[j] = nums[j - 1] + 1 ,那么我们称这个前缀是一个 顺序前缀 。特殊情况是,只包含 nums[0] 的前缀也是一个 顺序前缀 。
请你返回 nums 中没有出现过的 最小 整数 x ,满足 x 大于等于 最长 顺序前缀的和。
示例 1:
输入:nums = [1,2,3,2,5]
输出:6
解释:nums 的最长顺序前缀是 [1,2,3] ,和为 6 ,6 不在数组中,所以 6 是大于等于最长顺序前缀和的最小整数。
示例 2:
输入:nums = [3,4,5,1,12,14,13]
输出:15
解释:nums 的最长顺序前缀是 [3,4,5] ,和为 12 ,12、13 和 14 都在数组中,但 15 不在,所以 15 是大于等于最长顺序前缀和的最小整数。
提示:
1 <= nums.length <= 50
1 <= nums[i] <= 50
设 nums 的异或和为 s。
求出最长前缀,同时维护最长前缀的元素和 sum。
不断增加 sum,直到 sum不在 nums 中。
返回 sum。
class Solution {
public int missingInteger(int[] nums) {
int sum = nums[0];
for (int i = 1; i < nums.length && nums[i] == nums[i - 1] + 1; i++) {
sum += nums[i];
}
Set set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
while (set.contains(sum)) { // 至多循环 n 次,例如 1324567
sum++;
}
return sum;
}
}