#C++ Day49 Basic Data Structure Chapter3  review-6  January 9 2026

14.基于排列构建数组

1920. 基于排列构建数组

简单

提示

给你一个 从 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.数组串联

1929. 数组串联

简单

相关标签

提示

给你一个长度为 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. 拥有最多糖果的孩子

1431. 拥有最多糖果的孩子

已解答

简单

提示

有 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;

    }

};