30 天刷题挑战(十六)

题目来源: LeetCode 75 30 天 JavaScript 挑战

841. 钥匙和房间

思路

广度优先算法,使用一个 Set 记录访问过的房间,使用队列 queue 先进先出的特性依次遍历每一个房间,最后判断 Set 的大小是否等于房间数。

代码

js 复制代码
/**
 * @param {number[][]} rooms
 * @return {boolean}
 */
var canVisitAllRooms = function(rooms) {
  const visited = new Set()
  const queue = []

  queue.push(0)
  visited.add(0)

  while(queue.length) {
    let nextRooms = rooms[queue.shift()]
   
    for(let i = 0; i < nextRooms.length; i++) {
      const r = nextRooms[i]

      if (!visited.has(r)) {
        queue.push(r)
        visited.add(r)
      }
    }
  }

  return visited.size === rooms.length
};

547. 省份数量

思路

广度优先算法,使用一个 Set 记录没被访问的城市,每个城市都能被访问的时候省份加一。

代码

ini 复制代码
/**
 * @param {string[][]} equations
 * @param {number[]} values
 * @param {string[][]} queries
 * @return {number[]}
 */
var calcEquation = function(equations, values, queries) {
  const map = new Map()     // 存储顶点和它的边
  const visited = new Map() // 缓存
  const res = []

  const dfs = (src ,dst) => {
    if (src === dst) {
      return 1.0
    }

    let adjs = map.get(src)

    for (let i = 0; i < adjs.length; i++) {
      let next = adjs[i]

      if (!visited.get(next[0])) {
        visited.set(next[0], true)

        let ret = dfs(next[0], dst)

        visited.set(next[0], false)

        if (ret !== -1.0) {
          return next[1] *ret
        }
      }
    }

    return -1.0
  }
  

  for (let i = 0; i < equations.length; ++i) {
    let e = equations[i]
    let v = values[i]
   
    if (!map.has(e[0])) {
      map.set(e[0], [])
      visited.set(e[0], false)
    }

    if (!map.has(e[1])) {
      map.set(e[1], [])
      visited.set(e[1], false)
    }

    let adj1 = map.get(e[0])
    let adj2 = map.get(e[1])
    adj1.push([e[1], v])
    adj2.push([e[0],  1 / v])
  }

  for (let q of queries) {
    let n0 = q[0]
    let n1 = q[1]

     if (map.has(n0) && map.has(n1)) {
       visited.set(n0, true)
       res.push(dfs(n0, n1))
       visited.set(n0, false)
     } else {
       res.push(-1.0)
     }
  }

 return res
};

本文完,感谢阅读。

相关推荐
GalenWu3 小时前
对象转换为 JSON 字符串(或反向解析)
前端·javascript·微信小程序·json
GUIQU.3 小时前
【Vue】微前端架构与Vue(qiankun、Micro-App)
前端·vue.js·架构
codists3 小时前
《算法导论(第4版)》阅读笔记:p14-p16
算法
数据潜水员4 小时前
插槽、生命周期
前端·javascript·vue.js
2401_837088504 小时前
CSS vertical-align
前端·html
优雅永不过时·4 小时前
实现一个漂亮的Three.js 扫光地面 圆形贴图扫光
前端·javascript·智慧城市·three.js·贴图·shader
zilpher_wang4 小时前
K-means
算法·机器学习·kmeans
柃歌4 小时前
【LeetCode Solutions】LeetCode 176 ~ 180 题解
数据结构·数据库·sql·算法·leetcode
袁气满满~_~4 小时前
LeetCode:101、对称二叉树
算法·leetcode·职场和发展
How_doyou_do4 小时前
Dijkstra
算法