力扣 1377 https://leetcode.cn/problems/frog-position-after-t-seconds/

这道题目用dp去做,构建邻接矩阵,做的时候需要注意题目条件,如果青蛙跳不动了,这个概率就保持不变了

一般跳青蛙,很容易想到dp

核心代码如下

public double frogPosition(i
public double frogPosition(int n, int[][] edges, int t, int target) {

//    用邻接矩阵表示
int[][] graph = new int[n+1][n+1]; for (int i = 0; i < edges.length; i++) {
int[] edge = edges[i]; int start=edge[0];
int end=edge[1];
// 无向图
graph[start][end]=1;
graph[end][start]=1; }
int[] isVisit = new int[n+1];
//1.dp[i][j] 表示i顶点 j秒时候的概率
double[][] dp = new double[n+1][t+1]; // 2.递推见循环 // 3.初始化1号点
dp[1][0]=1;
isVisit[1]=1;
for (int time = 1; time <= t; time++) { // 拿出当前time--的值 从它们出发 ,然后计算能够到达的点 for (int i = 0; i < dp.length; i++) { if (dp[i][time-1]!=0){
// 这个地方可以往下面走 // 顶点是i // 找顶点i的临界节点
List<Integer> neithbor =getNeighbor(graph,i,isVisit); // 这些节点 新加概率
for (int j = 0; j < neithbor.size(); j++) { dp[neithbor.get(j)][time]+=dp[i][time-1]/neithbor.size();
isVisit[neithbor.get(j)]=1; } // 如果neithbor.size是0的话,说明谁也到不了,以后这个点的概率就固定死了
if (neithbor.isEmpty()){
for (int j = time; j <= t; j++) {
dp[i][j]=dp[i][time-1];
}
} } } } // for (int i = dp[target].length-1; i >=0; i--) {
// if (dp[target][t]!=0){
// return dp[target][t];
// }
// t--;
// } return dp[target][t]; } private List<Integer> getNeighbor(int[][] graph, int start, int[] isVisit) { ArrayList<Integer> list = new ArrayList<>();
int[] neithbor = graph[start]; for (int i = 0; i < neithbor.length; i++) {
if (neithbor[i]==1){
if (isVisit[i]==0){
list.add(i);
}
}
}
return list;
}

更好的

官方用了dfs去做

dfs思路是判断这个节点有多少个叶子节点

一层层递归进去,知道找到了target,再往外返回的时候,计算ans/节点个数

起始只要算节点有多少个就行了,要经过多少次边才会到达这个节点

比如说题目给的图片 4递归回去2 有2个节点,2递归回去1有3个节点 ,那么4的概率就是1/(2*3)

民间有个很好的想法

该怎么避免精度丢失,让精度丢失的越少越好

做法 既然答案是由若干分子为 的分数相乘得到,那么干脆只把分母相乘,最后再计算一下倒数,就可以避免因浮点乘法导致的精度丢失了。另外,整数的计算效率通常比浮点数的高。

每日一题 力扣 1377 https://leetcode.cn/problems/frog-position-after-t-seconds/的更多相关文章

  1. 刷题-力扣-剑指 Offer 42. 连续子数组的最大和

    剑指 Offer 42. 连续子数组的最大和 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de ...

  2. 刷题-力扣-剑指 Offer II 055. 二叉搜索树迭代器

    剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有 ...

  3. 刷题-力扣-541. 反转字符串 II

    541. 反转字符串 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-string-ii 著作权归领扣网络所有. ...

  4. 刷题-力扣-113. 路径总和 II

    113. 路径总和 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/path-sum-ii 著作权归领扣网络所有.商业转载请联系 ...

  5. 刷题-力扣-1137. 第 N 个泰波那契数

    1137. 第 N 个泰波那契数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/n-th-tribonacci-number 著作权 ...

  6. 刷题-力扣-LCP 07. 传递信息

    LCP 07. 传递信息 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/chuan-di-xin-xi 著作权归领扣网络所有.商业转 ...

  7. 刷题-力扣-168. Excel表列名称

    168. Excel表列名称 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/excel-sheet-column-title 著作权 ...

  8. 刷题-力扣-337. 打家劫舍 III

    337. 打家劫舍 III 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/house-robber-iii 著作权归领扣网络所有.商 ...

  9. 刷题-力扣-230. 二叉搜索树中第K小的元素

    230. 二叉搜索树中第K小的元素 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a ...

  10. 刷题-力扣-剑指 Offer 15. 二进制中1的个数

    剑指 Offer 15. 二进制中1的个数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de- ...

随机推荐

  1. Java 开源项目整合

    在JAVA学习过程中,学习到的简单项目,在这里记录下. SSM框架的整合 使用到的框架:SpringMVC + Spring + MyBatis 地址:https://github.com/liyif ...

  2. C# System.lnvalidOperationException:"A second operation started on this context before a previousoperation completed. This is usually caused by different threads using the same instance ofDbContext...

    与上一篇问题一样,只是错误不一样,DbContext 不支持并发请求,每个数据库操作都使用await就可以了

  3. devops工具链基建建设评价标准

    之所以写这篇是因为有朋友私下让我完善下基建建设的标准和四个阶梯划分,然后让我一定要把腾讯和百度加到基建建设的排名中(看热闹不嫌事大). 基建infra建设四个考察维度 1)工具链完整性:该有的工具是否 ...

  4. 极简cfs公平调度算法

    1. 说明 1> linux内核关于task调度这块是比较复杂的,流程也比较长,要从源码一一讲清楚很容易看晕 2> 本篇文章主要是讲清楚cfs公平调度算法如何将task在时钟中断驱动下切换 ...

  5. vue侦听器(引入vue.js写法)

    首先在html中引入vue.js,具体怎么下载可以参考https://blog.csdn.net/lvoelife/article/details/129254906,下载后在html中引入: 侦听d ...

  6. VUEX(状态管理)之憨憨篇

    1.导入vuex包 import vuex from 'vuex' 2.注册vuex到vue中 vue.use(vuex) 3.new vuex.store() 得到一个数据存储对象 var stor ...

  7. [SWPUCTF 2021 新生赛]简简单单的逻辑

    得到一个.py文件,一般是没壳的,不过还是要养成习惯,查个壳: 意料之中,啥也没有,打开文件: 给了我们一个加密逻辑,然后最后一行给了一个结果:那么就是根据上述的逻辑,反解密出flag就好了 分析一下 ...

  8. selenium 多浏览器处理

    开头 当我们做多浏览器自动化测试的时候,需要很多不同的浏览器,所以不同的参数对应不同的浏览器操作 目录结构 新建一个 base.py 文件, 通过 os 捕获到从命令行传进来的 import pyte ...

  9. 2022-10-16:以下go语言代码输出什么?A:timed out;B:panic;C:没有任何输出。 package main import ( “context“ “fmt“

    2022-10-16:以下go语言代码输出什么?A:timed out:B:panic:C:没有任何输出. package main import ( "context" &quo ...

  10. 2021-03-21:给定一棵二叉树的头节点head,求以head为头的树中,最小深度是多少?

    2021-03-21:给定一棵二叉树的头节点head,求以head为头的树中,最小深度是多少? 福大大 答案2021-03-21: 1.递归. 2.莫里斯遍历. 代码用golang编写,代码如下: p ...