本文首发于馆主君晓的博客,04-25每日一题

题目描述

  话不多说,先放题目链接和题目截图,398.随机数索引,题目如下图所示:

题目分析

  一般人看到这道题的思路就是使用哈希表去做,首先建立一个哈希表,表的key是数组里的元素,表的value是每个元素在数组中的下标数组。那么在pick函数里,首先根据元素的值在哈希表中获取其的下标数组,然后根据下标数组的长度生成随机数,根据随机数取出我们需要的下标。

  当然如果学过水塘抽样的算法的话,那么这道题可以用抽样的思路去做。题目里有这样的一个限制,那就是对于重复的数字,我们随机返回其索引。那么对于水塘抽样的话,我们的思路可以是这样,假设在数组中,我们的target数有k个,那么我们可以这样做,首先遍历数组,当遍历的第i个target的时候,我们生成[0,i)的随机数,如果随机数等于0,那么我们就记录i为我们需要返回的索引。这个我们也可以使用数学证明一下,思路如下:(如果这块还没理解,我们待会儿看看代码就理解了)

代码实现

  对于使用哈希表的思路,我们的代码如下,使用c++实现

class Solution {unordered_map<int, vector<int>> pos;
public:Solution(vector<int> &nums) {for (int i = 0; i < nums.size(); ++i) {pos[nums[i]].push_back(i);}}int pick(int target) {auto &indices = pos[target];return indices[rand() % indices.size()];}
};

  对于使用水塘抽样的思路,我们的代码如下,使用c++实现:

class Solution {vector<int>& nums;
public:Solution(vector<int>& nums):nums(nums){}int pick(int target) {int ans = 0;for(int i = 0,count = 0;i<nums.size();i++){if(nums[i]==target){count++;if(rand()%count==0){ans = i;}}}return ans;}
};

结语

  每天进步一点点,offer就近一点点

【04-25】力扣每日一题相关推荐

  1. 【爬虫】力扣每日一题每天自动邮件提醒!!!

    使用python实现了一个力扣每日一题每天自动邮件提醒的小爬虫,小但实用!!! 文章目录 A.需求来源与分析 B.技术角度分析 C.具体分析步骤 1.接口协议分析 2.发邮件 3.写crontab放服 ...

  2. 【JAVA】交错字符串——力扣每日一题(六)(2020.07.18)

    目录 题目:97. 交错字符串 思路 如果你从本文中学习到丝毫知识,那么请您点点关注.点赞.评论和收藏 大家好,我是爱做梦的鱼,我是东北大学大数据实验班大三的小菜鸡,非常渴望优秀,羡慕优秀的人,个人博 ...

  3. leetcode 力扣每日一题系列详解——总目录

    这是总目录,该系列持续更新中........ leetcode 力扣每日一题系列详解--总目录

  4. 力扣每日一题每天自动邮件提醒

    A.需求来源与分析 需求来源于生活,对于只是偶尔有兴趣做做题的我,力扣的每日一题对我一直有以下的不便: 太简单不想做,需要花太多时间的不想做,每天打开力扣其实只是想看一下是什么题,有意思才做. 看题需 ...

  5. 力扣每日一题:1720.解码异或后的数组 python异或操作

    1720.解码异或后的数组 https://leetcode-cn.com/problems/decode-xored-array/ 难度:简单 题目: 未知 整数数组 arr 由 n 个非负整数组成 ...

  6. LeetCode 力扣每日一题 488.祖玛游戏

    题目描述: 你正在参与祖玛游戏的一个变种. 在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 'R'.黄色 'Y'.蓝色 'B'.绿色 'G' 或白色 'W' .你的手中也有一些彩 ...

  7. 力扣每日一题——两数相加II

    发现做的题难度始终不高,今天Leecode给了一个稍微难一点的题目.(前两天没更是因为去拔牙了~~>_<~~) 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每 ...

  8. 2022.1.4 力扣-每日一题-猫和老鼠

    题目描述: 两位玩家分别扮演猫和老鼠,在一张 无向 图上进行游戏,两人轮流行动. 图的形式是:graph[a] 是一个列表,由满足 ab 是图中的一条边的所有节点 b 组成. 老鼠从节点 1 开始,第 ...

  9. 力扣每日一题——独一无二出现的次数

    难度:简单 题目: 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数. 如果每个数的出现次数都是独一无二的,就返回 true:否则返回 false. 示例 1: 输入:arr = [1,2 ...

最新文章

  1. IDEA中用好Lombok,撸码效率至少提升5倍
  2. 查询出来时间不对_2020年一级、二级建造师执业资格考试成绩可查询!
  3. 心动警告!你有一份礼包待领取→
  4. 动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化
  5. 【渝粤教育】广东开放大学 社会调查与方法 形成性考核 (35)
  6. 角速度求积分能得到欧拉角吗_一个有趣的反常积分问题
  7. Python内置模块和第三方模块
  8. React使用create-react-app 创建项目失败,解决方法
  9. java变量类型概念_java变量类型
  10. 北理工计算机学院沈建斌,中国高校计算机大赛-团体程序设计天梯赛全国总决赛获奖.doc...
  11. 显示器偏色测试软件,显示器偏色,如何解决显示器偏色?
  12. matlab 非a到z,MATLAB命令大全(A-Z)
  13. 关于.net的一则笑话(无奈一笑)
  14. 数据库操作--已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行
  15. MySQL汉字字段按拼音排序
  16. 子豪兄-YOLOv3
  17. 来自CSDN阿坤使用CSDN插件的简单测评意见
  18. 小白学习Python的第十六天之正则表达式
  19. UCI数据集数据的分析 ——葡萄酒数据
  20. 联发科半年报:5G芯片立头功,高端与高通硬刚

热门文章

  1. C语言求解一元二次方程组
  2. 五大改编金曲唱出股民心声
  3. [技巧]用js生成日志文件、获取ip。
  4. 今日头条的文章怎么同步到其他自媒体平台?
  5. 极限编程(ExtremeProgramming,简称XP)
  6. 不登QQ时就不启动腾讯QPCore服务
  7. 香港大学的计算机专业,面试香港大学的计算机专业该怎么表现?
  8. Fastdata极数:2020年央视《新闻联播》数据报告
  9. 三位数的茎叶图怎么看_茎叶图怎么看,茎叶图的特点(简要概括)
  10. HT32基本外设使用