dfs深搜封閉島嶼+動態規劃地圖裡的寶箱+LRU緩存類

来源:https://www.cnblogs.com/ivanlee717/archive/2023/08/20/17644128.html
-Advertisement-
Play Games

# wangyi > 記錄一次某大廠筆試的AC過程 ![image-20230820152914557](https://img2023.cnblogs.com/blog/2862884/202308/2862884-20230820160050687-208549606.png) ``給定一個二維 ...


wangyi

記錄一次某大廠筆試的AC過程

image-20230820152914557

給定一個二維矩陣,代表一片海域,海域由土地(0)和水域(1)組成,島嶼是由最大(上下左右)4個方向的聯通的土地(0)組成的土地群,封閉島嶼則是指完全由1包圍的島嶼,請找出封閉島嶼的數量。

image-20230820153104697

題中給的圖可以看到外圍的1已經用藍色標出來的了,但是真正是封閉島嶼的只有這一塊,

image-20230820153604392

class Solution:
    def closedIsland(self , grid: List[List[int]]) -> int:
        # write code here
        if not grid or not grid[0]:
            return 0
        m, n = len(grid), len(grid[0])
        dir = [(0,1),(0,-1),(1,0),(-1,0)]
        def dfs(i,j):
            if i<0 or j<0 or i>=m or j >=n:
                return False
            if grid[i][j] == 1:
                return True

            grid[i][j] = 1

            res = [dfs(i+dx,j+dy) for dx, dy in dir]
            return all(res)

        return sum(dfs(i,j) for i in range(m) for j in range(n) if grid[i][j] == 0)

這是一個比較經典的深度搜索問題,我們可以通過遍歷每個格子,當遇到土地0時進行四個方向的搜索,同時標記已經遍歷過的格子,最直接的辦法就是把他變成水域。使用all函數如果iterable的所有元素不為0、''、False或者iterable為空,all(iterable)返回True,否則返回False

image-20230820154051128

為了慶祝某游戲周年慶,策劃組正在為該游戲設計一次福利活動,他們希望推出一個迷宮尋寶小游戲,讓玩家探索迷宮中的寶箱,玩家可以在不同的寶箱中獲取不同數量的金幣,並最終通過金幣兌換游戲中的限定道具。

為了增加玩法的多樣性,策劃同學希望能夠提供2種尋寶地圖,但是每個玩家一天只能選擇一張尋寶地圖進行探索。同時策劃同學提供了寶箱價值的列表,但是這個寶箱價值能不能被合理投放在兩個地圖中尚未驗證,因此希望能藉助程式的手段來驗證寶箱價值的設計是否合理,具體要求如下:
1.每個寶箱必須目只能被放置在一個地圖中,不能重覆利用。
2.為了確保玩家獲得的獎勵數量,策劃同學提供了一個“保底值”,兩張地圖的寶箱獎勵總和必須都大於等於這個保 底值。

現在需要請你來設計投放程式,假設保底值為k,每個寶箱的價值都是正整數,並被存放乾數組nums中,需要通過返回值告訴策劃,這樣的寶箱價值能夠有幾種合理的投放方式.

image-20230820154246971

由於每個寶箱只能被選擇一次,並且需要計算所有可能的寶箱組合,對於每一個寶箱,只存在兩種情況,選入當前地圖或者不選入當前地圖。同時在計算某個價值是否能通過前i個寶箱價值的組合獲取時,可能會出現重覆計算,使用動態規劃存儲子問題的結果來提高運行效率。

動態規划過程:

  1. 定義一個dp[i]存儲一個地圖的寶箱總價值恰好為i的分配的方案數
  2. 狀態轉移:對於每一個價值為v的寶箱,我們可以選擇選入或者不選入當前地圖。如果選入,則有dp[i-v]種方案;如果不選入,則有dp[i]種方法,所以dp[i] = dp[i] + dp[i-v]
  3. 初始化狀態:沒有任何元素時,和為0的方案數為1,所以dp[0] = 1
  4. 遍歷整個數組,將i>=k並且i<=total_value-k的方法進行求和
class Solution:
    def countPartitions(self, nums: List[int], k: int) -> int:
        n = len(nums)
        total_value = sum(nums)

        if total_value < 2 * k:
            return 0

        dp = [0] * (total_value + 1)
        dp[0] = 1

        for i in nums:
            for j in range(total_value, i - 1, -1):
                dp[j] += dp[j - i]

        count = sum(dp[i] for i in range(k, total_value - k + 1))
        return count  

第三個設計題設計一個LRU緩存類

image-20230820155522550

image-20230820155617221

本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/17644128.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 領域區域設計的分層架構模型其實是在不斷優化和發展的,從最早的傳統直腸子式的四層架構模型,逐漸演變成目前以依賴倒置為原則的新的四層架構模型,從而實現了各層對基礎設施層的解耦。 DDD中的分層架構很好的應用了[關註點分離原則](http://www.cnblogs.com/LittleFeiHu/p/6 ...
  • 本文通過docker快速部署elasticsearch8版本,再添加一臺組成集群,並且部署kibana用於常規查詢操作,以及一些常見的es操作 ...
  • 本文旨在根據LOVE2D官方文檔和教程實現打磚塊的游戲,記錄部分實現過程和重要知識點 - 目標摧毀所有磚塊 - 玩家控制球拍左右滑動反彈小球 - 小球摧毀磚塊 - 小球保持在屏幕內 - 小球碰到屏幕底部,GAME OVER ## 引擎配置 ```lua -- conf.lua love.conf = ...
  • ## 前提 之前曾經寫過一篇[《SpringBoot3.x 原生鏡像-Native Image 嘗鮮》](https://vlts.cn/post/spring-boot-native-image-demo),當時`SpringBoot`處於`3.0.0-M5`版本,功能尚未穩定。這次會基於`Spr ...
  • ### POM.XML配置 ``` 4.0.0 com.shouke des-utils 1.0 1.8 ${java.version} ${java.version} UTF-8 UTF-8 cn.hutool hutool-all 4.1.0 ``` ## 代碼實現 ```groovy pack ...
  • # 網路編程 ## 一、概述 網路編程是指編寫運行在多個設備(電腦)的程式,這些設備都通過網路連接起來。 ### 電腦網路 把分佈在不同地理區域的電腦與專門的外部設備用通信線路互連成一個規模大,功能強的網路系統, 從而使眾多的電腦可以方便地互相傳遞信息,共用硬體,軟體,數據信息等資源。 ## ...
  • 在Python中,元組(Tuple)是一種有序且不可變的數據類型。元組可以包含任意數量的元素,用逗號分隔,並用圓括弧括起來。與列表(List)不同,元組的元素不能修改。元組與列表一樣,可以通過索引訪問其中的元素。 ```python my_tuple = ("apple", "banana", "c ...
  • OpenAI的Karpathy利用周末搞了一個迷你Llama2項目llama2.c用500行C語言實現無任何依賴項的推理程式,此項目在github發佈以來衍生出了基於各種語言的迷你Llama推理實現llama2.go、llama2.java、llama2.py等等; 但該項目原本的模型並不支持中文, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...