力扣 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. 五月二十五日jdbc基础知识点

    Jdbc连接数据库1.建立与数据库的连接1.1导入jdbc包1.2加载JDBC驱动java.lang.Class.forName(JDBCDriverClass);Class.forName(driv ...

  2. InnoDB引擎之flush脏页

    利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,由此也带来了内存脏页的问题. 脏页会被后台线程自动 flush,也会由于数据页淘汰而触发 flush,而刷脏页的过程由于会占用 ...

  3. group_concat_max_len设置过小致group_concat()排列不全

    问题描述:group_concat_max_len默认值1024导致group_concat函数排列显示不足 group_concat_max_len长度显示跟group_concat排列长度息息相关 ...

  4. Spring源码系列:核心概念解析

    前言 本文旨在为读者解析Spring源码中的关键类,以便读者在深入阅读源码时,能够了解关键类的作用和用途.在阅读Spring源码时,经常会遇到一些不熟悉的概念,了解关键类的作用可以帮助读者更好地理解这 ...

  5. MDC轻量化日志链路跟踪的若干种应用场景

    "If debugging is the process of removing software bugs, then programming must be the process of ...

  6. 【FAQ】统一扫码服务常见问题及解答

    1.隐私政策是怎么样的?收集哪些信息? 关于Scan Kit的隐私政策及收集的信息,请查看SDK隐私安全说明. Android:SDK隐私安全说明 iOS:SDK隐私安全说明 2.如何使用多码识别?多 ...

  7. CopyOnWriteArrayList的使用和优缺点

    CopyOnWriteArrayList允许并发读,读操作无锁,性能较高: 而写操作(含删除),比如向容器中添加/删除一个元素,则首先将当前容器复制一份,然后在新副本上执行写操作,结束之后再将原容器的 ...

  8. React 富文本编辑 braft-editor

    推荐一种react-富文本编辑器,braft-editor braft-editor的github:https://github.com/margox/braft-editor braft-edito ...

  9. rfc7234之http缓存

    声明:本人原创文章,详细内容已发布在我的微信个人技术公众号---网络技术修炼,公众号总结普及网络基础知识,包括基础原理.网络方案.开发经验和问题定位案例等,欢迎关注. 缓存概念 缓存处理请求步骤 缓存 ...

  10. Node + Express 后台开发 —— 上传、下载和发布

    上传.下载和发布 前面我们已经完成了数据库的增删改查,在弄一个上传图片.下载 csv,一个最简单的后台开发就已完成,最后部署即可. 上传图片 需求 需求:做一个个人简介的表单提交,有昵称.简介和头像. ...