力扣382.链表随机节点

news2024/11/14 13:23:45

Problem: 382. 链表随机节点

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

思路

水塘抽样易得,当遇到i个元素,有 1 / i 1/i 1/i的概率选择该元素;则在实际操作中我们定义一个下标i从1开始遍历每次判断rand() % i == 0(该操作就是判断概率是否为 1 / i 1/i 1/i;若成立则将该节点值返回

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为链表的长度

空间复杂度:

O ( 1 ) O(1) O(1)

Code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
    ListNode *head;
public:
    Solution(ListNode* head) {
        this -> head = head;
    }

    /**
     * Returns a random node of the linked list
     *
     * @return int
     */
    int getRandom() {
        int res = 0;
        ListNode* node = head;
        int i;
        for (int i = 1; node != nullptr; ++i) {
            if (rand() % i == 0) {
                res = node -> val;
            }
            node = node -> next;
        }
        return res;
    }
};


/**
 * Your Solution object will be instantiated and called as such:
 * Solution* obj = new Solution(head);
 * int param_1 = obj->getRandom();
 */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1465276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Verilog刷题笔记35

题目: Create a 1-bit wide, 256-to-1 multiplexer. The 256 inputs are all packed into a single 256-bit input vector. sel0 should select in[0], sel1 selects bits in[1], sel2 selects bits in[2], etc. 解法: module top_module( input [255:…

猜谜“龘”人速来!网安人元宵灯谜有礼了

​​灯笼高挂,星光璀璨,品味糯叽叽的元宵,以灯谜为媒,亚信安全邀你共赴元宵佳节。 热辣滚烫的班先别上了,文末有奖竞猜,快来参与! 喜闹元宵 谜面一:一路向上成大业; 谜…

HTML5新婚、年会、各种聚会的现场抽奖活动(附源码)

文章目录 1.抽奖平台设计来源1.1 主界面效果1.2 抽奖效果1.3 中奖效果 2.效果和源码配置2.1 动态效果2.2 人员信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/deta…

第一节-docker介绍

这里写自定义目录标题 一、什么是docker二、docker和virtual machine三、docker架构 一、什么是docker docker是一种容器引擎,用于构建、部署、运行应用程序和服务。 docker的每个容器通过沙箱机制相互隔离,互不干扰。 docker容器技术相比传统的虚拟机有…

六、回归与聚类算法 - 模型保存与加载

目录 1、API 2、案例 欠拟合与过拟合线性回归的改进 - 岭回归分类算法:逻辑回归模型保存与加载无监督学习:K-means算法 1、API 2、案例

费舍尔FISHER金属探测器探测仪维修F70

美国FISHER LABS费舍尔地下金属探测器,金属探测仪等维修(考古探金银铜探宝等仪器)。 费舍尔F70视听目标ID金属探测器,Fisher 金属探测器公司成立于1931年,在实验条件很艰苦的情况下,研发出了地下金属探测器…

昨天Google发布了最新的开源模型Gemma,今天我来体验一下

前言 看看以前写的文章,业余搞人工智能还是很早之前的事情了,之前为了高工资,一直想从事人工智能相关的工作都没有实现。现在终于可以安静地系统地学习一下了。也是一边学习一边写博客记录吧。 昨天Google发布了最新的开源模型Gemma&#xf…

常见锁策略,CAS,synchrodized原理讲解

🎥 个人主页:Dikz12📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 常见锁策略 乐观锁和悲观锁 轻量级锁和重量级锁 自旋锁和挂起等待锁 读写锁 公平锁和非公平锁…

【ctfshow—web】——信息搜集篇1(web1~20详解)

ctfshow—web题解 web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20 web1 题目提示 开发注释未及时删除 那就找开发注释咯,可以用F12来查看,也可以CtrlU直接查看源代码呢 就拿到flag了 web2 题目提示 j…

【数据结构】顺序表实现的层层分析!!

关注小庄 顿顿解馋◍˃ ᗜ ˂◍ 引言:本篇博客我们来认识数据结构其中之一的顺序表,我们将认识到什么是顺序表以及顺序表的实现,请放心食用~ 文章目录 一.什么是顺序表🏠 线性表🏠 顺序表 二.顺序表的实现&#x1f3e0…

ShardingSphere 5.x 系列【14】广播表、单表

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1.广播表1.1 概述1.2 案例演示1.2.1 环境准备1.2.2 配置1.2.3 测试2. 单表2.…

2024年.NET框架发展趋势预测

.NET框架仍然是全球开发人员的编程基石,为构建广泛的应用程序提供了一个通用的、强大的环境。微软对创新的坚定承诺见证了.NET的发展,以满足技术领域不断变化的需求。今年,在更广泛的行业运动、技术进步和开发者社区反馈的推动下,…

记一次:Python的学习笔记五(Django集成swagger)

上一篇集成在了gatway上了,但给别人使用swagger的时候还是没有文档,如何集成swagger呢? python版本:Python 3.11.5 Django版本:4.2.7 0、Swagger 文档介绍 Swagger 是一种用于 RESTful API 的开源框架,…

2种方法,教你使用Python实现接口自动化中的参数关联

通常在接口自动化中,经常会参数关联的问题,那么什么是参数关联? 参数关联就是上一个接口的返回值会被下一个接口当做参数运用,其中Python中可以实现参数关联的方法有很多种,今天小编给大家介绍下,如何通过…

SQL Server ID 自增不连续、删除数据后再次插入ID不连续

背景 当我们使用SQL Server 进行数据库操作时,经常会把 Table 的 ID 设置成主键自增 PRIMARY KEY IDENTITY,但是这样做存在一个问题就是 当我们删除一行数据后,再次添加后会看到ID的顺序不连续,如下所示。 查询一下:…

冲突管理最佳实践

任何团队都无法避免冲突,如何有效管理冲突,将冲突转化为团队成长和凝聚的动力,是任何一个团队管理者的必修课。原文: Best Practices for Managing Conflict in Engineering Management Obie Fernandez Unsplash 冲突在任何组织中都不可避免&…

排序第三篇 直接插入排序

插入排序的基本思想是: 每次将一个待排序的记录按其关键字的大小插入到前面已排好序的文件中的适当位置, 直到全部记录插入完为止。 一 简介 插入排序可分为2类 本文介绍 直接插入排序 它的基本操作是: 假设待排充序的记录存储在数组 R[1……

【鸿蒙 HarmonyOS 4.0】状态管理

一、介绍 资料来自官网:文档中心 在声明式UI编程框架中,UI是程序状态的运行结果,用户构建了一个UI模型,其中应用的运行时的状态是参数。当参数改变时,UI作为返回结果,也将进行对应的改变。这些运行时的状…

【Linux】普通用户sudo失败怎么办

普通用户,sudo失败报错怎么办 问题分析如何解决成功 问题分析 新建的普通用户sudo失败 sudo提权,是以root的身份执行命令。 当我们用sudo提升权限的时候,这里有个问题,Linux会提示我们输入当前普通用户的密码——这就有点不好。…

骨传导耳机哪个品牌比较好?精选五大倍受好评的机型推荐!

近几年大家对保护听力健康的意识也越来越强烈了,骨传导耳机作为保护听力健康的不二之选,使用的人也越来越多,但是,在面对市场上鱼龙混杂的产品时,还是有很多人不知道该怎么去挑选一款性能优秀的骨传导耳机,…