当前位置:网站首页>384.打乱数组
384.打乱数组
2022-07-30 05:38:00 【Linke66】


解题思路:
用一个辅助数组vec,大小与传入数组一样,并且元素是生成的随机数。使得vec按照升序排序,并且原始数组也按照其排序方法排序。通过这种方式来随机打乱数组。
举个例子:
nums [2,3,1] vec [10,6,30]
那么vec按升序排序就是vec[0]和vec[1]交换,那么nums[0]和nums[1]也交换。所以
nums [3,2,1] vec [6,10,30]
具体代码如下
class Solution {
vector<int> m_nums; //初始数组
vector<int> n_nums; //用来操作的数组
vector<int> vec;
public:
Solution(vector<int>& nums) {
for(int i=0;i<nums.size();++i)
m_nums.push_back(nums[i]);
//调制大小
n_nums.resize(nums.size());
vec.resize(nums.size());
}
vector<int> reset() {
return m_nums;
}
vector<int> shuffle() {
int n=m_nums.size();
//生成[0-199]的随机数,范围无所谓
for(int i=0;i<n;++i)
vec[i]=rand()%200;
//拷贝原始数组
for(int i=0;i<n;++i)
n_nums[i]=m_nums[i];
//使用冒泡排序使得vec按升序排序
for(int i=0;i<n;++i){
for(int j=0;j<n-i-1;++j){
if(vec[j]>vec[j+1]){
swap(vec[j],vec[j+1]);
swap(n_nums[j],n_nums[j+1]); //n_nums也按照相同的规则排序,即打乱
}
}
}
return n_nums;
}
};
/** * Your Solution object will be instantiated and called as such: * Solution* obj = new Solution(nums); * vector<int> param_1 = obj->reset(); * vector<int> param_2 = obj->shuffle(); */
边栏推荐
猜你喜欢
随机推荐
2022 SQL big factory high-frequency practical interview questions (detailed analysis)
Redis学习
mysql 中 in 的用法
子查询作为检索表时的不同使用场景以及是否需要添加别名的问题
k折交叉验证(k-fold Cross-validation)
Mysql8.+学习笔记
手把手教你设计一个CSDN系统
Falling ants (Peking University entrance exam questions)
2022年SQL大厂高频实战面试题(详细解析)
MySQL 用户授权
留念 · 大学时代最后的系统设计图
Different usage scenarios of subqueries as retrieval tables and the question of whether to add aliases
2022年SQL经典面试题总结(带解析)
SOA(面向服务架构)是什么?
More fragrant open source projects than Ruoyi in 2022
Error: npm ERR code EPERM
create-nuxt-app创建出来的项目没有server
enumerate() 函数
2022年比若依更香的开源项目
Error: listen EADDRINUSE: address already in use 127.0.0.1:3000









