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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 2146. 价格范围内最高排名的 K 样物品(BFS)

發(fā)布時(shí)間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2146. 价格范围内最高排名的 K 样物品(BFS) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個(gè)下標(biāo)從 0 開(kāi)始的二維整數(shù)數(shù)組 grid ,它的大小為 m x n ,表示一個(gè)商店中物品的分布圖。數(shù)組中的整數(shù)含義為:

  • 0 表示無(wú)法穿越的一堵墻。
  • 1 表示可以自由通過(guò)的一個(gè)空格子。
  • 所有其他正整數(shù)表示該格子內(nèi)的一樣物品的價(jià)格。你可以自由經(jīng)過(guò)這些格子。

從一個(gè)格子走到上下左右相鄰格子花費(fèi) 1 步。

同時(shí)給你一個(gè)整數(shù)數(shù)組 pricing 和 start ,其中 pricing = [low, high] 且 start = [row, col] ,表示你開(kāi)始位置為 (row, col) ,同時(shí)你只對(duì)物品價(jià)格在 閉區(qū)間 [low, high] 之內(nèi)的物品感興趣。同時(shí)給你一個(gè)整數(shù) k 。

你想知道給定范圍 內(nèi)排名最高 的 k 件物品的 位置 。排名按照優(yōu)先級(jí)從高到低的以下規(guī)則制定:

  • 距離:定義為從 start 到一件物品的最短路徑需要的步數(shù)(較近 距離的排名更高)。
  • 價(jià)格:較低 價(jià)格的物品有更高優(yōu)先級(jí),但只考慮在給定范圍之內(nèi)的價(jià)格。
  • 行坐標(biāo):較小 行坐標(biāo)的有更高優(yōu)先級(jí)。
  • 列坐標(biāo):較小 列坐標(biāo)的有更高優(yōu)先級(jí)。

請(qǐng)你返回給定價(jià)格內(nèi)排名最高的 k 件物品的坐標(biāo),將它們按照排名排序后返回。
如果給定價(jià)格內(nèi)少于 k 件物品,那么請(qǐng)將它們的坐標(biāo) 全部 返回。

示例 1:

輸入:grid = [[1,2,0,1],[1,3,0,1],[0,2,5,1]], pricing = [2,5], start = [0,0], k = 3 輸出:[[0,1],[1,1],[2,1]] 解釋:起點(diǎn)為 (0,0) 。 價(jià)格范圍為 [2,5] ,我們可以選擇的物品坐標(biāo)為 (0,1)(1,1)(2,1)(2,2) 。 這些物品的排名為: - (0,1) 距離為 1 - (1,1) 距離為 2 - (2,1) 距離為 3 - (2,2) 距離為 4 所以,給定價(jià)格范圍內(nèi)排名最高的 3 件物品的坐標(biāo)為 (0,1)(1,1)(2,1) 。

示例 2:

輸入:grid = [[1,2,0,1],[1,3,3,1],[0,2,5,1]], pricing = [2,3], start = [2,3], k = 2 輸出:[[2,1],[1,2]] 解釋:起點(diǎn)為 (2,3) 。 價(jià)格范圍為 [2,3] ,我們可以選擇的物品坐標(biāo)為 (0,1)(1,1)(1,2)(2,1) 。 這些物品的排名為: - (2,1) 距離為 2 ,價(jià)格為 2 - (1,2) 距離為 2 ,價(jià)格為 3 - (1,1) 距離為 3 - (0,1) 距離為 4 所以,給定價(jià)格范圍內(nèi)排名最高的 2 件物品的坐標(biāo)為 (2,1)(1,2)

示例 3:

輸入:grid = [[1,1,1],[0,0,1],[2,3,4]], pricing = [2,3], start = [0,0], k = 3 輸出:[[2,1],[2,0]] 解釋:起點(diǎn)為 (0,0) 。 價(jià)格范圍為 [2,3] ,我們可以選擇的物品坐標(biāo)為 (2,0)(2,1) 。 這些物品的排名為: - (2,1) 距離為 5 - (2,0) 距離為 6 所以,給定價(jià)格范圍內(nèi)排名最高的 2 件物品的坐標(biāo)為 (2,1)(2,0) 。 注意,k = 3 但給定價(jià)格范圍內(nèi)只有 2 件物品。提示: m == grid.length n == grid[i].length 1 <= m, n <= 10^5 1 <= m * n <= 10^5 0 <= grid[i][j] <= 10^5 pricing.length == 2 2 <= low <= high <= 10^5 start.length == 2 0 <= row <= m - 1 0 <= col <= n - 1 grid[row][col] > 0 1 <= k <= m * n

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/k-highest-ranked-items-within-a-price-range
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

  • BFS 遍歷 地圖,記錄步數(shù),價(jià)錢(qián),橫縱坐標(biāo)
  • 對(duì)答案進(jìn)行排序輸出
class Solution:from collections import dequedef highestRankedKItems(self, grid: List[List[int]], pricing: List[int], start: List[int], k: int) -> List[List[int]]:m, n = len(grid), len(grid[0])ans = []vis = [[False for _ in range(n)] for _ in range(m)]dir = [[1,0],[0,1],[-1,0],[0,-1]]q = deque([])q.append(start)vis[start[0]][start[1]] = Truestep = 0while len(q):size = len(q)for _ in range(size):x, y = q[0]q.popleft()if pricing[0] <= grid[x][y] <= pricing[1]:ans.append((step, grid[x][y], x, y))if grid[x][y] > 0:for d in range(4):nx = x+dir[d][0]ny = y+dir[d][1]if nx>=0 and nx<m and ny>=0 and ny<n and not vis[nx][ny]:q.append([nx, ny])vis[nx][ny] = Truestep += 1ans.sort(key=lambda x : [x[0],x[1],x[2],x[3]])return [[x[2],x[3]] for x in ans[:k]]

1056 ms 53.5 MB Python3


我的CSDN博客地址 https://michael.blog.csdn.net/

長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 2146. 价格范围内最高排名的 K 样物品(BFS)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。