日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【LeetCode笔记】399. 除法求值(Java、图)

發布時間:2024/7/23 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LeetCode笔记】399. 除法求值(Java、图) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 題目描述
  • 思路 && 代碼

題目描述

  • 第二道圖題,大概是hot100里唯二的圖題了。。

思路 && 代碼

  • 鄰接矩陣存儲,g[i][j] 代表 i / j 的值
  • 通過已知的表達式,對矩陣進行維護(包括間接得到的值,見注釋的步驟2部分)
  • 通過三重循環,把全部可能的間接關系補上
class Solution {public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {// 1. 統計所有出現的字符,并賦予對應的 indexint count = 0; Map<String, Integer> map = new HashMap<>();for(List<String> list : equations) {for(String s : list) {if(!map.containsKey(s)) {map.put(s, count++);}}}// 1. 鄰接矩陣,初始化double[][] graph = new double[count + 1][count + 1];for(String s : map.keySet()) {int x = map.get(s);graph[x][x] = 1.0; // 自身相除得0;}int index = 0;// 由已知等式,更新矩陣值for(List<String> list : equations) {String a = list.get(0);String b = list.get(1);int aa = map.get(a);int bb = map.get(b);double value = values[index++];graph[aa][bb] = value;graph[bb][aa] = 1 / value;}// 2. 通過 Floyd 算法進行計算for(int i = 0; i <= count; i++) {for(int j = 0; j <= count; j++) {for(int k = 0; k <= count; k++) {// Case 1: 已出現過if(j == k || graph[j][k] != 0) {continue;}// Case 2: 傳遞賦值 j / i = x, i / k = y ==> j / k = x * yif(graph[j][i] != 0 && graph[i][k] != 0) {graph[j][k] = graph[j][i] * graph[i][k];}}}}// 3. 查詢矩陣得到答案double[] res = new double[queries.size()];for(int i = 0; i < res.length; i++) {List<String> q = queries.get(i);String a = q.get(0);String b = q.get(1);// 字符串存在判斷if(map.containsKey(a) && map.containsKey(b)) {double ans = graph[map.get(a)][map.get(b)];// 未知,則取 -1.0res[i] = (ans == 0) ? -1.0 : ans;}else {// 未出現字符,也取 -1.0res[i] = -1.0;}}return res;} }

總結

以上是生活随笔為你收集整理的【LeetCode笔记】399. 除法求值(Java、图)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。