LeetCode刷題記錄——day3

来源:https://www.cnblogs.com/humanplug/p/18088194
-Advertisement-
Play Games

1、https://leetcode.cn/problems/gas-station/submissions/514930619/?envType=study-plan-v2&envId=top-interview-150 對於這個問題可以這樣來考慮,將數據看作一個環,如果答案唯一,那麼就意味著從任 ...


1、https://leetcode.cn/problems/gas-station/submissions/514930619/?envType=study-plan-v2&envId=top-interview-150
對於這個問題可以這樣來考慮,將數據看作一個環,如果答案唯一,那麼就意味著從任意一個節點開始尋找,最後都會得到同一個節點的答案,那麼為何不直接從0節點開始呢?
其次,我們可以建立一個total變數來記錄總的油量和消耗量的差的結果,倘若這個值小於0,則一定沒有解,倘若大於零,則說明一定有解。
繼續這個思路,當有解時,我們不妨從i節點出發,設置一個temp變數記錄從i開始到j的剩餘油量。當temp小於0時,說明現在到達的節點j是可以到達的,但是無法到達j+1節點,那麼下次的起點就可以從j+1開始重覆這個過程。
為什麼?
不妨這樣考慮,i到j構成一個弧,同樣,我們假設當前的問題是無解的,那麼我們應該可以用上述方式將j與j+1斷開,把環分成許多的弧。當然我們這裡假設的無解,其實從total就可以看出。那麼假如現在我們發現total大於0了,我們還可以將環分割成這樣的弧嗎?我們不妨0開始,一直分割,假設前面我們分割成了許多弧,最後從某個節點k開始一直遍歷完了卻再也沒有分割出弧。那麼這個末尾的弧可以和第一個弧鏈上嗎?當然可以!假設不可以的話,那麼我們每個弧最終的剩餘油量都不足以支持它到達下一個弧,那麼total不就是小於0了嗎?但我們已經得到了total大於0,所以最後一個弧一定可以和第一個弧連起來,接下來兩個弧變成一個弧,我們將這個新弧看作最後一個弧,那麼他和現在的新的第一個弧會怎麼樣呢,同理,他們還是可以連起來的!由此我們的演算法就明確了:

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int len = gas.size();
        vector<int> remaind(len);
        int total = 0,temp = 0;
        int start = 0;
        for(int i=0;i<len;i++){
            total=total+gas[i]-cost[i];
            temp = temp+gas[i]-cost[i];
            if(temp<0){
                temp=0;
                start=i+1;
            }
        }
        return total<0?-1:start;
    }
};

2、https://leetcode.cn/problems/candy/submissions/514952725/?envType=study-plan-v2&envId=top-interview-150
對於這個問題,我們觀察數組,會發現第一個和最後一個元素非常特殊,因為它們只有一個元素和自己相鄰,如果其餘元素都確定了,那麼它們也就確定了,所以我們不妨從第二個和倒數第二個元素開始處理,我們設置兩個變數j,i它們分別從第二個以及倒數第二個開始向後向前遍歷,並且它們會分別比較自己的j-1以及i+1元素,倘若比它們小則不變,大於則比較現在的糖果數量,若是少了則改變糖果數量。最後每個元素都會和自己左右兩個相鄰的元素比較。

class Solution {
public:
    int candy(vector<int>& ratings) {
        int len=ratings.size();
        vector<int> candy(len);
        int total=0;
        for(int i=len-2,j=1;i>=0;i--,j++){
            if(ratings[i]>ratings[i+1]){
                if(candy[i]<=candy[i+1]){
                    total=total+candy[i+1]+1-candy[i];
                    candy[i]=candy[i+1]+1;
                }
            }
            if(ratings[j]>ratings[j-1]){
                if(candy[j]<=candy[j-1]){
                    total=total+candy[j-1]+1-candy[j];
                    candy[j]=candy[j-1]+1;
                }
            }
        }
        total = total+len;
        return total;
    }
};

本文由博客一文多發平臺 OpenWrite 發佈!


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

-Advertisement-
Play Games
更多相關文章
  • Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹如何運用`QProcess`組件實現針對進程的控制管理等。當你在使用Qt進行跨平臺應用程式開發時,經常需要與外部進... ...
  • 對於程式員來說這個單詞完全擁有另外一個含義,Spring指的是一個開源項目,而這個項目非常厲害。而Spring與JSR、JarkataEE淵源頗深。 ...
  • 剛做完一道模板A*,看到這題我直接小腦萎縮了... 阿米諾斯!這怎麼用A*?!——剛開題的我 beeeeeeeeee like 甚至比模板簡單(這是綠的...) 其實會是會但是紙張的是這玩意我不會搞估價函數我草! 然後突然想到能不能把這個狀態下有多少個數字不在目標位置作為估價函數? 我喜歡 \(ID ...
  • 引言 在JDK1.2之前Java並沒有提供軟引用、弱引用和虛引用這些高級的引用類型。而是提供了一種基本的引用類型,稱為Reference。並且當時Java中的對象只有兩種狀態:被引用和未被引用。當一個對象被引用時,它將一直存在於記憶體中,直到它不再被任何引用指向時,才會被垃圾回收器回收。而被引用也就是 ...
  • 拓展閱讀 Devops-01-devops 是什麼? Devops-02-Jpom 簡而輕的低侵入式線上構建、自動部署、日常運維、項目監控軟體 代碼質量管理 SonarQube-01-入門介紹 項目管理平臺-01-jira 入門介紹 缺陷跟蹤管理系統,為針對缺陷管理、任務追蹤和項目管理的商業性應用軟 ...
  • 概述:在C++中,序列點是表達式中確保求值順序的點。其缺失可能導致未定義行為。基礎功能示例演示了自增運算符的序列點,而高級功能示例展示了函數調用的序列點,有助於避免不確定行為。在編寫代碼時遵循序列點規則是確保程式行為可預測的關鍵。 在C++中,序列點是在表達式中保證求值順序的點。未定義的行為通常涉及 ...
  • 概述:C++中的對象切片指通過將派生類對象賦值給基類對象,導致派生部分被“切掉”,只保留基類部分。這可能發生在值傳遞、賦值等操作中。對象切片的基礎功能示例展示了派生類對象賦值給基類對象時的現象,而高級功能示例則展示了通過基類指針實現派生類對象的訪問和多態。 對象切片(Object Slicing)是 ...
  • 效果圖: 方法如下: 1.簡單版(較繁瑣但是直觀): 1.1 定義資料庫模型(models.py)中添加表 class ProductSample(models.Model): # 示例商品表 id = models.AutoField(db_column='ID', primary_key=Tru ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...