LeetCodeHOT100:60. n个骰子的点数、4. 寻找两个正序数组的中位数
LeetCodeHOT100:
- 剑指 Offer 60. n个骰子的点数
- 4. 寻找两个正序数组的中位数
- 96. 不同的二叉搜索树
剑指 Offer 60. n个骰子的点数
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
示例 1:
输入: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]
思路分析: 时间复杂度为 O ( n 3 ) O(n^3) O(n3),其中第一个循环的次数是 n n n,第二个循环的次数是 6 n 6n 6n,第三个循环的次数是 6 6 6,因此总次数为 n × 6 n × 6 = O ( n 3 ) n \times 6n \times 6 = O(n^3) n×6n×6=O(n3)。
空间复杂度为 O ( n 2 ) O(n^2) O(n2),需要开辟一个二维数组 dp,大小为 ( n + 1 ) × ( 6 n + 1 ) (n+1) \times (6n+1) (n+1)×(6n+1)。
class Solution {public double[] dicesProbability(int n) {// 特判,当 n 为 0 时,返回空数组if (n == 0) {return new double[0];}// 创建一个二维数组 dp,dp[i][j] 表示投掷 i 个骰子,点数之和为 j 的次数int[][] dp = new int[n + 1][6 * n + 1];// 初始化只投掷一个骰子的情况,即 dp[1][1~6] = 1for (int i = 1; i <= 6; i++) {dp[1][i] = 1;}// 从投掷两个骰子开始,逐渐增加骰子个数for (int i = 2; i <= n; i++) {// 对于每个骰子数之和 j,枚举最后一个骰子的点数 kfor (int j = i; j <= 6 * n; j++) {for (int k = 1; k <= 6; k++) {// 如果 j 大于等于 k,则 j-k 是一个合法的下标if (j >= k) {// 计算投掷 i 个骰子,点数之和为 j 的次数dp[i][j] += dp[i - 1][j - k];}}}}// 计算所有情况的可能性总数,即 6 的 n 次方double count = Math.pow(6, n);// 创建一个长度为 5*n+1 的数组 res,用于存储所有可能点数的概率double[] res = new double[5 * n + 1];int index = 0;// 枚举所有可能点数 i,将 dp[n][i] 除以总次数 count 得到概率for (int i = n; i <= 6 * n; i++) {res[index++] = dp[n][i] / count;}return res;}
}
4. 寻找两个正序数组的中位数
题目:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
思路分析: 假设我们要找出两个数组中的第k小的数,我们可以比较两个数组的中位数mid1和mid2,假设mid1小于mid2,则nums1中前k/2个元素一定不可能是第k小的数(因为nums1中前k/2个元素加上nums2中前k/2个元素最多只能组成k个元素,而这k个元素中已经有mid1和mid2了,因此nums1中前k/2个元素一定不可能是第k小的数),因此我们可以将这些元素删除。此时,我们需要在nums1的剩余元素和nums2中查找第k-k/2小的数,这可以通过递归实现。为了避免每次都将数组的前k/2个元素都复制到一个新的数组中,我们可以使用指针来标记当前查找的区域,在每次递归调用时调整指针即可。具体来说,我们可以编写一个名为findK的函数,该函数接收四个参数:数组nums1、数组nums2、两个指针l1和l2,以及要查找的第k小的数。函数的返回值是两个数组中第k小的数。在每次递归调用中,我们需要判断各种边界条件,以避免出现数组下标越界等错误。其中,如果k=1,则说明我们已经找到了当前查找的中位数,此时只需要返回两个数组中较小的那个元素即可。如果删除这个条件,则在递归查找的过程中无法正确判断何时已经找到了中位数,从而导致错误的结果。在计算中位数时,我们需要分别处理数组长度为奇数和偶数的情况。如果数组长度为奇数,则中位数是第(len+1)/2个元素;如果数组长度为偶数,则中位数是第len/2个元素和第(len+2)/2个元素的平均值。最后,我们可以编写一个名为findMedianSortedArrays的函数,该函数接收两个已排序的数组nums1和nums2,并返回它们的中位数。
class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {// 计算两个数组的总长度int len = nums1.length + nums2.length;// 如果总长度为奇数,则中位数是第(len+1)/2个数if (len % 2 == 1) {return findK(nums1, 0, nums2, 0, (len + 1) / 2) * 1.0;} else { // 如果总长度为偶数,则中位数是第len/2个数和第(len+2)/2个数的平均值return (findK(nums1, 0, nums2, 0, len / 2) + findK(nums1, 0, nums2, 0, (len + 2) / 2)) * 0.5;}}// 在两个数组中查找第k小的数private int findK(int[] nums1, int l1, int[] nums2, int l2, int k) {// 如果nums1中已经没有元素,则第k小的数在nums2中if (l1 >= nums1.length) {return nums2[l2 + k - 1];}// 如果nums2中已经没有元素,则第k小的数在nums1中if (l2 >= nums2.length) {return nums1[l1 + k - 1];}// 如果k=1,则第k小的数就是nums1和nums2中较小的那个if (k == 1) {return Math.min(nums1[l1], nums2[l2]);}// 在nums1和nums2中各取k/2个元素进行比较int mid1 = Integer.MAX_VALUE;int mid2 = Integer.MAX_VALUE;if (nums1.length - l1 >= k / 2) {mid1 = nums1[l1 + k / 2 - 1];}if (nums2.length - l2 >= k / 2) {mid2 = nums2[l2 + k / 2 - 1];}// 如果nums1中的中位数小于nums2中的中位数,则第k小的数一定不在nums1的前k/2个元素中,可以排除这些元素,继续在剩余的元素中查找第k-k/2小的数;否则第k小的数一定不在nums2的前k/2个元素中,可以排除这些元素,继续在剩余的元素中查找第k-k/2小的数if (mid1 < mid2) {return findK(nums1, l1 + k / 2, nums2, l2, k - k / 2);} else {return findK(nums1, l1, nums2, l2 + k / 2, k - k / 2);}}
}
96. 不同的二叉搜索树
题目:给你一个整数
返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3
输出:5
思路分析: 使用一个一维数组 dp 来记
相关文章:
LeetCodeHOT100:60. n个骰子的点数、4. 寻找两个正序数组的中位数
LeetCodeHOT100: 剑指 Offer 60. n个骰子的点数4. 寻找两个正序数组的中位数96. 不同的二叉搜索树 剑指 Offer 60. n个骰子的点数 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率…...

apisix的authz-casbin
目录 1、apisix的auth-casbin官方介绍 2、casbin介绍和使用 2.1基本知识: 2.2使用例子 3、配置插件 4、postman调用 5、auth-casbin的坑 1、apisix的auth-casbin官方介绍 authz-casbin | Apache APISIX -- Cloud-Native API Gateway 2、casbin介绍和使用 c…...
数学基础 --线性代数之理解矩阵乘法
理解矩阵乘法的解析 矩阵乘法(Matrix Multiplication)是线性代数中的核心操作之一。在数学、几何和工程实际中,它不仅是一种代数运算规则,还承载着丰富的几何和映射意义。本文将从多个角度深入解析矩阵乘法,帮助读者理…...

TCP Window Full是怎么来的
wireshark查看包时,会看到TCP Window Full,总结下它的特点: 1. Sender会显示 TCP Window Full 2. “Sender已发出,但,Receiver尚未ack的字节”,即Sender的 bytes in flights 3. Sender的 bytes in fligh…...

【22】Word:小李-高新技术企业政策❗
目录 题目 NO1.2 NO3 NO4 NO5.6 NO7.8 NO9.10 若文章中存在删除空白行等要求,可以到最后来完成。注意最后一定要检查此部分!注意:大多是和事例一样即可,不用一摸一样,但也不要差太多。 题目 NO1.2 F12Fn&a…...

大数据,Hadoop,HDFS的简单介绍
大数据 海量数据,具有高增长率、数据类型多样化、一定时间内无法使用常规软件工具进行捕捉、管理和处理的数据集 合 大数据的特征: 4V Volume : 巨大的数据量 Variety : 数据类型多样化 结构化的数据 : 即具有固定格式和有限长度的数据 半结构化的数据 : 是…...

Python预训练视觉和大语言模型——精彩试读
基础模型永久改变了机器学习。从BERT到ChatGPT,从CLIP到Stable Diffusion,当数十亿个参数、大数据集与成百上千个GPU相结合时,结果刷新了纪录。《Python预训练视觉和大语言模型》呈现的真知灼见和示例代码将帮你在AWS和Amazon SageMaker上从头…...

html全局遮罩,通过websocket来实现实时发布公告
1.index.html代码示例 <div id"websocket" style"display:none;position: absolute;color:red;background-color: black;width: 100%;height: 100%;z-index: 100; opacity: 0.9; padding-top: 30%;padding-left: 30%; padding-border:1px; "onclick&q…...

Vue3初学之Element-plus Form表单
1.使用 el-form 组件 el-form 是一个表单容器,可以包含多个 el-form-item,每个 el-form-item 包裹具体的表单控件,如输入框、选择器、日期选择器等。 <template><el-form :model"form" label-width"120px">…...
第14章:Python TDD应对货币类开发变化(一)
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...

ElasticSearch索引别名的应用
个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview Elasticsearch 索引别名是一种极为灵活且强大的功能,它允许用户为一个或多个索引创建逻辑上…...

C++和OpenGL实现3D游戏编程【连载21】——父物体和子物体模式实现
欢迎来到zhooyu的专栏。 🔥C和OpenGL实现3D游戏编程【专题总览】 1、本节要实现的内容 上节课我们已经创建了一个基础Object类,以后所有的游戏元素都可以从这个基类中派生出来。同时为了操作方便,我们可以为任意两个Object类(及其…...

Mac苹果电脑 怎么用word文档和Excel表格?
以下是详细步骤,帮助你在 MacBook 上安装和使用 Word 和 Excel: 安装 Microsoft Office 你可以通过以下几种方式在 MacBook 上安装 Word 和 Excel: 方法一:应用安装 pan.baidu.com/s/1EO2uefLPoeqboi69gIeZZg?pwdi2xk 方法二…...

使用AI生成金融时间序列数据:解决股市场的数据稀缺问题并提升信噪比
“GENERATIVE MODELS FOR FINANCIAL TIME SERIES DATA: ENHANCING SIGNAL-TO-NOISE RATIO AND ADDRESSING DATA SCARCITY IN A-SHARE MARKET” 论文地址:https://arxiv.org/pdf/2501.00063 摘要 金融领域面临的数据稀缺与低信噪比问题,限制了深度学习在…...

QT信号槽 笔记
信号与槽就是QT中处理计算机外设响应的一种机制 比如敲击键盘、点击鼠标 // 举例: 代码: connect(ls,SIGNAL(sig_chifanla()),ww,SLOT(slot_quchifan())); connect(ls,SIGNAL(sig_chifanla()),zl,SLOT(slot_quchifan()));connect函数:这是…...

【计算机网络】传输层协议TCP与UDP
传输层 传输层位于OSI七层网络模型的第四层,主要负责端到端通信,可靠性保障(TCP),流量控制(TCP),拥塞控制(TCP),数据分段与分组,多路复用与解复用等,通过TCP与UDP协议实现…...

UE控件学习
ListView: item设置:使能在list设置为Entry类 关闭listview自带的滑动条 【UEUI篇】ListView使用经验总结 UE4 ListView用法总结(二)Item的选中与数据获取 Grid Panel: 常用作背包,每个格子大小可不相…...

ThinkPHP 8的多对多关联
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...

Linux内核编程(二十一)USB驱动开发
一、驱动类型 USB 驱动开发主要分为两种:主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备,而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…...

【Block总结】WTConv,小波变换(Wavelet Transform)来扩展卷积神经网络(CNN)的感受野
论文解读:Wavelet Convolutions for Large Receptive Fields 论文信息 标题: Wavelet Convolutions for Large Receptive Fields作者: Shahaf E. Finder, Roy Amoyal, Eran Treister, Oren Freifeld提交日期: 2024年7月8日arXiv链接: Wavelet Convolutions for La…...
上位机知识篇---网页端实现
一、网页端基础概念 网页的本质 网页是通过浏览器展示的超文本(HTML)内容,依赖 HTTP/HTTPS 协议 进行数据传输。组成要素: 结构层(HTML):定义页面内容和语义(如标题、段落、列表等&a…...

windows10下搭建nfs服务器
windows10下搭建nfs服务器 有参考这篇博客 Windows10搭建NFS服务 - fuzidage - 博客园 下载 NFS Server这个app 通过网盘分享的文件:nfs1268 (1).exe 链接: https://pan.baidu.com/s/1rE4h710Uh-13kWGXvjkZzw 提取码: mwa4 --来自百度网盘超级会员v5的分享 下载后…...
常见 DOM 事件全解析
常见 DOM 事件全解析 DOM 事件是用户与网页交互的核心机制,分为 用户交互事件、文档加载事件、表单事件、键盘事件 等 8 大类: 一、鼠标事件 事件触发时机典型应用场景click点击元素(按下+释放)按钮操作、导航跳转dblclick双击元素文件/图片编辑mousedown鼠标按下拖拽开始…...
CommandLineRunner详细教程
文章目录 1. CommandLineRunner基础概念和背景1.1 什么是CommandLineRunner?1.1.1 核心概念1.1.2 接口定义 1.2 为什么需要CommandLineRunner?1.3 CommandLineRunner的特点1.3.1 执行时机1.3.2 与ApplicationRunner的区别 2. 环境搭建和项目结构2.1 Mave…...
网页端 VUE+C#/FastAPI获取客户端IP和hostname
1 IP可以获取,但是发现获取到的是服务端的IP,如何解决呢。 如果采用nginx反向代理,那么可以在conf/nginx.conf文件中配置 location /WebApi/ { proxy_pass http://localhost:5000/; #这个/会替换location种的WebApi路径 #关键,加…...

如何使用 HTML、CSS 和 JavaScript 随机更改图片颜色
原文:如何使用 HTML、CSS 和 JavaScript 随机更改图片颜色 | w3cschool笔记 (请勿标记为付费!!!!) 在网页开发中,为图片添加动态效果可以显著提升用户体验。今天,我将向…...

基于51单片机的光强控制LED灯亮灭
目录 具体实现功能 设计介绍 资料内容 全部内容 资料获取 具体实现功能 具体功能: (1)按下按键K后光敏电阻进行光照检测,LCD1602显示光照强度值; (2)光照值小于15时,上面2个LE…...
Linux操作系统故障应急场景及对应排查方法
001:系统CPU负载高并触发监控报警 005 查看系统CPU使用情况,,确认CPU数量,确认系统负载,确认CPU高对系统的影响 006 定位占用CPU资源最多的进程,根据进程判断是应用进程还是系统进程还是第三方工具进程。 014 查看…...

零基础在实践中学习网络安全-皮卡丘靶场(第八期-Unsafe Filedownload模块)
这期内容更是简单和方便,毕竟谁还没在浏览器上下载过东西,不过对于url的构造方面,可能有一点问题,大家要多练手 介绍 不安全的文件下载概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,…...
【深度学习-Day 24】过拟合与欠拟合:深入解析模型泛化能力的核心挑战
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...