当前位置: 首页 > article >正文

384.打乱数组

目录

  • 题目
  • 解法

题目

给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是 等可能 的。

实现 Solution class:

Solution(int[] nums) 使用整数数组 nums 初始化对象
int[] reset() 重设数组到它的初始状态并返回
int[] shuffle() 返回数组随机打乱后的结果

解法

class Solution {
public:
    Solution(vector<int>& nums) {
        this->nums = nums;
        this->original.resize(nums.size());
        copy(nums.begin(), nums.end(), original.begin());
    }
    
    vector<int> reset() {
        copy(original.begin(), original.end(), nums.begin());
        return nums;
    }
    
    vector<int> shuffle() {
       for (int i = 0; i < nums.size(); ++i) {
            int j = i + rand() % (nums.size() - i);
            swap(nums[i], nums[j]);
        }
        return nums;


    }
private:
    vector<int> nums;
    vector<int> original;
};

/**
 * 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();
 */

洗牌算法,很形象,确实,每次洗的牌是将当前牌与当前牌后方随机的牌交换。


http://www.kler.cn/a/371875.html

相关文章:

  • leetcode344. Reverse String
  • 省域经济高质量发展水平测算及数据2000-2021年
  • 以太网交换安全:DHCP Snooping
  • 项目1 yolov5鱼苗检测计数
  • 2024年医疗人工智能研究报告-生成式AI爆发,医疗人工智能走到新的十字路口(附下载)
  • 详解PHP正则表达式中的转义操作
  • 单细胞数据分析(三):单细胞聚类分析
  • Linux上 Git 的简介、安装及操作详解(操作windows、linux通用)
  • LeetCode583:两个字符串的删除操作
  • windows server 2008 建立ftp服务器
  • QT linux 打包时库和插件如何生成
  • 嵌入式浏览器 -- Chromium VS Firefox
  • 国内对接使用GPT解决方案——API中转
  • map的使用(c++)
  • 基于langchain框架的智能PDF问答(一)创建向量数据库
  • 全新更新!Fastreport.NET 2025.1版本发布,提升报告开发体验
  • ubuntu编译ffmpeg
  • 【mysql】导出导入mysql表结构或者数据
  • GPT避坑指南:如何辨别逆向、AZ、OpenAI官转
  • 使用阿里云 MQTT 服务进行消息传输的基本实践
  • 基于QT用工厂模式实现串口通信与网络通信激光器的控制
  • miRNA分析流程学习(四)/miRNA芯片数据差异分析再学习以及异常火山图可能原因解释
  • 【TEST】负载/性能测试工具 Grafana K6 (Docker 版)
  • 【系统架构设计师】案例分析预测试卷一(3道材料题)
  • 小满OKKICRM与钉钉数据集成方案解析
  • 扶贫工作数字化:SpringBoot精准扶贫系统