14.基于排列构建数组
简单
提示
给你一个 从 0 开始的排列 nums(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans[i] = nums[nums[i]] 。返回构建好的数组 ans 。
从 0 开始的排列 nums 是一个由 0 到 nums.length – 1(0 和 nums.length – 1 也包含在内)的不同整数组成的数组。
示例 1:
输入:nums = [0,2,1,5,3,4]
输出:[0,1,2,4,5,3]
解释:数组 ans 构建如下:
ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
= [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]]
= [0,1,2,4,5,3]
示例 2:
输入:nums = [5,0,1,2,3,4]
输出:[4,5,0,1,2,3]
解释:数组 ans 构建如下:
ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
= [nums[5], nums[0], nums[1], nums[2], nums[3], nums[4]]
= [4,5,0,1,2,3]
提示:
- 1 <= nums.length <= 1000
- 0 <= nums[i] < nums.length
- nums 中的元素 互不相同
进阶:你能在不使用额外空间的情况下解决此问题吗(即 O(1) 内存)?
class Solution {
public:
vector<int> buildArray(vector<int>& nums) {
int n = nums.size();
vector<int> ans(n);
for(int i=0;i<nums.size();i++){
ans[i]=nums[nums[i]];
}
return ans;
}
};
class Solution {
public:
vector<int> buildArray(vector<int>& nums) {
vector<int> ret;
for(int i=0;i<nums.size();++i){
int ans = nums[nums[i]];
ret.push_back(ans);
}
return ret;
}
};
15.数组串联
简单
相关标签
提示
给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < n 的 i ,满足下述所有要求:
- ans[i] == nums[i]
- ans[i + n] == nums[i]
具体而言,ans 由两个 nums 数组 串联 形成。
返回数组ans 。
示例 1:
输入:nums = [1,2,1]
输出:[1,2,1,1,2,1]
解释:数组 ans 按下述方式形成:
– ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
– ans = [1,2,1,1,2,1]
示例 2:
输入:nums = [1,3,2,1]
输出:[1,3,2,1,1,3,2,1]
解释:数组 ans 按下述方式形成:
– ans = [nums[0],nums[1],nums[2],nums[3],nums[0],nums[1],nums[2],nums[3]]
– ans = [1,3,2,1,1,3,2,1]
提示:
- n == nums.length
- 1 <= n <= 1000
- 1 <= nums[i] <= 1000
class Solution {
public:
vector<int> getConcatenation(vector<int>& nums) {
vector<int> ret;
for(int i=0;i<nums.size();++i){
int ans1 = nums[i];
ret.push_back(ans1);
}
int size = ret.size();
for(int i=0;i<size;++i){
int ans2=ret[i];
ret.push_back(ans2);
}
return ret;
}
};
class Solution {
public:
vector<int> getConcatenation(vector<int>& nums) {
vector<int> ans;
for(int i=0;i<nums.size();++i){
ans.push_back(nums[i]);
}
for(int i=0;i<nums.size();++i){
ans.push_back(nums[i]);
}
return ans;
}
};
16. 拥有最多糖果的孩子
已解答
简单
提示
有 n 个有糖果的孩子。给你一个数组 candies,其中 candies[i] 代表第 i 个孩子拥有的糖果数目,和一个整数 extraCandies 表示你所有的额外糖果的数量。
返回一个长度为 n 的布尔数组 result,如果把所有的 extraCandies 给第 i 个孩子之后,他会拥有所有孩子中 最多 的糖果,那么 result[i] 为 true,否则为 false。
注意,允许有多个孩子同时拥有 最多 的糖果数目。
示例 1:
输入:candies = [2,3,5,1,3], extraCandies = 3
输出:[true,true,true,false,true]
解释:如果你把额外的糖果全部给:
孩子 1,将有 2 + 3 = 5 个糖果,是孩子中最多的。
孩子 2,将有 3 + 3 = 6 个糖果,是孩子中最多的。
孩子 3,将有 5 + 3 = 8 个糖果,是孩子中最多的。
孩子 4,将有 1 + 3 = 4 个糖果,不是孩子中最多的。
孩子 5,将有 3 + 3 = 6 个糖果,是孩子中最多的。
示例 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]
提示:
- n == candies.length
- 2 <= n <= 100
- 1 <= candies[i] <= 100
- 1 <= extraCandies <= 50
class Solution {
public:
vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {
int n=candies.size();
vector <bool> ret(n);
int maxCandies = 0;
for(int i=0;i<n;++i){
maxCandies = max(maxCandies,candies[i]);
}
for(int i=0;i<n;++i){
if(candies[i]+extraCandies >= maxCandies){
ret[i] = true;
}
else{
ret[i] = false;
}
}
return ret;
}
};
class Solution {
public:
vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {
vector <bool> ans;
for(int i=0;i<candies.size();i++){
candies[i] += extraCandies;
int maxIdx = 0;
for(int j=1;j<candies.size();j++){
if(candies[j]>candies[maxIdx]){
maxIdx = j;
}
}
if(candies[maxIdx] == candies[i]){
ans.push_back(true);
}
else{
ans.push_back(false);
}
candies[i] -= extraCandies;
}
return ans;
}
};