给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。
示例 1:
输入:candies = [2,3,5,1,3], extraCandies = 3
输出:[true,true,true,false,true]
解释:
孩子 1 有 2 个糖果,如果他得到所有额外的糖果(3个),那么他总共有 5 个糖果,他将成为拥有最多糖果的孩子。
孩子 2 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
孩子 3 有 5 个糖果,他已经是拥有最多糖果的孩子。
孩子 4 有 1 个糖果,即使他得到所有额外的糖果,他也只有 4 个糖果,无法成为拥有糖果最多的孩子。
孩子 5 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
示例 2:
输入:candies = [4,2,1,1,2], extraCandies = 1
输出:[true,false,false,false,false]
解释:只有 1 个额外糖果,所以不管额外糖果给谁,只有孩子 1 可以成为拥有糖果最多的孩子。
示例 3:
输入:candies = [12,1,12], extraCandies = 10
输出:[true,false,true]
提示:
2 <= candies.length <= 100
1 <= candies[i] <= 100
1 <= extraCandies <= 50
class Solution {
public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
int max = 0;
for (int temp:candies){
if (temp>max){
max = temp;
}
}
List<Boolean> res = new ArrayList<>();
for (int i : candies) {
res.add(i + extraCandies >= max);
}
return res;
}
}
假设你有两个数组,一个长一个短,短的元素均不相同。找到长数组中包含短数组所有的元素的最短子数组,其出现顺序无关紧要。
返回最短子数组的左端点和右端点,如有多个满足条件的子数组,返回左端点最小的一个。若不存在,返回空数组。
示例 1:
输入:
big =
[7,5,9,0,2,1,3,5,7,9,1,1,5,8,8,9,7]
small = [1,5,9]
输出: [7,10]
示例 2:
输入:
big =
[1,2,3]
small = [4]
输出: []
提示:
big.length <= 100000
1 <= small.length <= 100000
class Solution {
public int[] shortestSeq(int[] big, int[] small) {
int n = big.length, m = small.length;
if(n < m) return new int[]{};
Map<Integer, Integer> map = new HashMap<>();
for (int e : small) {
map.put(e, 1);
}
int l = 0, r = 0, k = m, minLen = Integer.MAX_VALUE, minL = -1, minR = -1;
while(r < n){
Integer num = map.get(big[r]);
if(num != null){
map.put(big[r], num - 1);
if(num == 1) k--;
}
if (k == 0){
while(k == 0){
num = map.get(big[l]);
if(num != null){
if(num == 0) k++;
map.put(big[l], num + 1);
}
l++;
}
if(r - l + 2 < minLen){
minLen = r - l + 2;
minL = l - 1;
minR = r;
}
}
r++;
}
if(minL == -1) return new int[]{};
return new int[]{minL, minR};
}
}