力扣 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. dev-tools

    Maven配置依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  2. 补五月四号java基础知识

    1.在JDK5中新增了自动包装和自动解包功能:当编译器发现程序再应该使用包装类对象的地方却使用基本数据类型的数据时,编译器将自动把该数据包装为该基本数据对应的包装类的对象,这个过程成为自动包装.如类型 ...

  3. JUC(七)分支合并框架

    JUC分支合并框架 简介 Fork/Join可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务的结果合并称为最终的计算结果. Fork:负责将任务拆分 Join:合并拆分任务 ForkJoi ...

  4. TIM-PWM输出,占空比改变时机对输出波形的影响

    一.实验概述 以下说明描述三种改变PWM占空比的方式,对于当前PWM输出波形的影响 1.禁止预装载功能,在PWM某一周期波形输出过程中改变占空比值(ccp) 2.禁止预装载功能,在PWM某周期波形输出 ...

  5. .NET周报 【4月第3期 2023-04-15】

    国内文章 Semantic Kernel 入门系列: Planner 规划器 https://www.cnblogs.com/xbotter/p/semantic_kernel_introductio ...

  6. HTML+CSS仿写的登录页面

    仿写的登录页面 使用HTML+CSS,感觉很简单,记录下 话不多说,直接上代码 <!DOCTYPE html> <html lang="en">     & ...

  7. 通过重构来加深理解——DDD

    上部分模型驱动设计的构造块为维护模型和实现之间的关系打下了基础.在开发过程中使用一系列成熟的基本构造块并运用一致的语言,能够使开发工作更加清晰而有条理. 我们面临的真正挑战是找到深层次的模型,这个模型 ...

  8. react中refs详解

    https://zh-hans.reactjs.org/docs/refs-and-the-dom.html 字符串形式ref 1 <input ref="myinput" ...

  9. 2021牛客OI赛前集训营-提高组(第二场)第三题 树数树题解

    题目描述 牛牛有一棵 \(n\) 个点的有根树,根为 \(1\). 我们称一个长度为 \(m\) 的序列 \(a\) 是好的,当且仅当: \(\forall i \in (1,m]\),\(a_i\) ...

  10. AGC061 F Perfect String

    毒瘤出题人,史诗加强 AGC 的 F-- 然而我连原题都不会,所以只学了原题做法. 翻译一下题意就是给定一张循环网格图,求经过 \((0,0)\) 的闭合回路条数. 由于网格图中每一个位置都等价,所以 ...