LeetCode 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.length <= 1000
0 <= nums[i] < nums.length
nums 中的元素 互不相同
法一:创建一个结果数组,按题意赋值即可:
class Solution {
public:
vector<int> buildArray(vector<int>& nums) {
vector<int> ans(nums.size());
int index = 0;
for (int &i : ans) {
i = nums[nums[index]];
++index;
}
return ans;
}
};
如果输入数组nums的长度为n,此算法时间复杂度为O(n),空间复杂度为(1)。
法二:原地构建,由于nums中的值最大为999,因此可将某位置的结果值乘1000存在该位置上,之后再遍历一遍数组,每个元素都除1000即可:
class Solution {
public:
vector<int> buildArray(vector<int>& nums) {
int sz = nums.size();
for (int i = 0; i < sz; ++i) {
nums[i] += 1000 * (nums[nums[i]] % 1000);
}
for (int i = 0; i < sz; ++i) {
nums[i] /= 1000;
}
return nums;
}
};
如果输入数组nums的长度为n,此算法时间复杂度为O(n),空间复杂度为(1)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2020-07-17 open函数返回0
2020-07-17 UNIX网络编程卷一 学习笔记 第七章 套接字选项