解题思路:

因为题目中要求需要常数级的空间复杂度,所以就需要计算链表长度了。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:int n = 0;  //用于记录链表长度,用于实现等概率ListNode* root;/** @param head The linked list's head.Note that the head is guaranteed to be not null, so it contains at least one node. */Solution(ListNode* head) {root = head;while(head){n++;head = head->next;}}/** Returns a random node's value. */int getRandom() {int tmp = 0 + rand() % n; //n是整数的范围ListNode* ln = root;while(tmp > 0){ln = ln->next;tmp--;}return ln->val;}
};/*** Your Solution object will be instantiated and called as such:* Solution* obj = new Solution(head);* int param_1 = obj->getRandom();*/

Leetcode 382. 链表随机节点 解题思路及C++实现相关推荐

  1. LeetCode 382. 链表随机节点(概率)

    1. 题目 给定一个单链表,随机选择链表的一个节点,并返回相应的节点值.保证每个节点被选的概率一样. 进阶: 如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现? 来源:力扣( ...

  2. leetcode 382. Linked List Random Node | 382. 链表随机节点(Java)

    题目 https://leetcode.com/problems/linked-list-random-node/ 题解 先存起来,再随机返回即可.不知道在考察什么? /*** Definition ...

  3. Leetcode 147. 对链表进行插入排序 解题思路及C++实现

    解题思路: 这道题目,如果不借助其它stl工具,只是使用本身的ListNode的话,最主要的一个问题是,每次找插入位置的时候,没有办法进行从后往前回溯,所以只能从head头结点往后比较,然后找出应当插 ...

  4. Leetcode 146. LRU缓存机制 解题思路及C++实现

    解题思路: 使用一个双向链表存储最常使用的key value对,最近使用的元素放在链表的表头,链表中最后一个元素是使用频率最低的元素.同时,使用一个map来记录对应的<key,<key, ...

  5. Leetcode 113. 路径总和 II 解题思路及C++实现

    解题思路: 典型的深度优先搜索或回溯法的问题. /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNo ...

  6. Leetcode 100. 相同的树 解题思路及C++实现

    解题思路: 这道题利用递归的方法. 先对当前的节点p和q进行非null判断,如果均为null,则返回true: 如果一个为null,另一个非null,则返回false: p q均为非null,则比较它 ...

  7. Leetcode 313. 超级丑数 解题思路及C++实现

    解题思路: 与Leetcode 264. 丑数 II的解题思路一样,均使用最小堆来存储丑数,第i次更新最小堆时,得到第i大的丑数. 可结合Leetcode 264. 丑数 II的解题思路理解:http ...

  8. Leetcode 166. 分数到小数 解题思路及C++实现

    解题思路: 这道题目的核心是怎么找到循环部分:当出现重复的余数时,就会出现循环. 前面需要考虑比较多种情况:除数是否为0:结果的正负:结果的整数部分和小数部分分开求解. 在求解小数部分的时候,需要用到 ...

  9. Leetcode 152. 乘积最大子序列 解题思路及C++实现

    解题思路: 求乘积最大的子序列,不同于和最大的子序列,两个负数相乘是会得到正数的,所以在遍历数组nums时,需要存储最大和最小的子序列乘积.然后每遍历一个元素,更新一次. class Solution ...

最新文章

  1. [NOI2002] 银河英雄传说(带权并查集好题)
  2. 新年到了,该规划一下来年了
  3. 获得某个organization unit下面的所有sales org id list
  4. Sql server时间转时间long
  5. opengl层次建模_层次建模简介
  6. node 16位 转24位_同时将24位和32位BMP图像顺时针旋转90度
  7. spring smtp_使用Spring使用Java发送电子邮件– GMail SMTP服务器示例
  8. java注解的反射_Java注解与反射
  9. C# 声明方法的语法
  10. Myeclipse10.7安装git插件并将Java项目上传到码云(github)
  11. vue3 @/cli脚手架搭建项目
  12. 【codeforces 340B】Maximal Area Quadrilateral
  13. Make WAR file 1.0
  14. 编程:OJ中使用C编程最基础的操作
  15. openlayer制作专题图
  16. Android Studio安装教程(保姆级超级详细)
  17. 2000字精华总结,安利一个超好用的 Python 数据分析神器
  18. H5页面展示丨网页三维展示丨产品3D展示原理【商迪3D】
  19. win10 64位系统 打开光盘出现339错误 缺少mscomctl.ocx组件 解决方案
  20. 【浙江大学C小程week2整理】

热门文章

  1. History命令用法
  2. Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件
  3. 关于ios app发布的中间证书的要求--解决WWDR证书过期方案
  4. 如何理解c和c ++的复杂类型声明 (转)
  5. 厦门“快捷贷”项目启动 最高可贷500万
  6. 服务机器人---多传感器融合
  7. 高通android新建项目
  8. 准备好了?测试人员迟早会被要求测试包含区块链技术的解决方案
  9. Deepmind顺练了人工智能14天成为星海2最强玩家
  10. 深入浅出浏览器渲染原理