leetcode403 青蛙過河

一只青蛙想要過河。 假定河流被等分為?x?個單元格,并且在每一個單元格內都有可能放有一石子(也有可能沒有)。 青蛙可以跳上石頭,但是不可以跳入水中。

給定石子的位置列表(用單元格序號升序表示),?請判定青蛙能否成功過河(即能否在最后一步跳至最后一個石子上)。?開始時,?青蛙默認已站在第一個石子上,并可以假定它第一步只能跳躍一個單位(即只能從單元格1跳至單元格2)。

如果青蛙上一步跳躍了?k?個單位,那么它接下來的跳躍距離只能選擇為?k - 1、k?或?k + 1個單位。?另請注意,青蛙只能向前方(終點的方向)跳躍。

請注意:

石子的數量 ≥ 2 且?< 1100;
每一個石子的位置序號都是一個非負整數,且其 < 231;
第一個石子的位置永遠是0。
示例?1:

[0,1,3,5,6,8,12,17]

總共有8個石子。
第一個石子處于序號為0的單元格的位置, 第二個石子處于序號為1的單元格的位置,
第三個石子在序號為3的單元格的位置, 以此定義整個數組...
最后一個石子處于序號為17的單元格的位置。

返回 true。即青蛙可以成功過河,按照如下方案跳躍:?
跳1個單位到第2塊石子, 然后跳2個單位到第3塊石子, 接著?
跳2個單位到第4塊石子, 然后跳3個單位到第6塊石子,?
跳4個單位到第7塊石子, 最后,跳5個單位到第8個石子(即最后一塊石子)。
示例 2:

[0,1,2,3,4,8,9,11]

返回 false。青蛙沒有辦法過河。?
這是因為第5和第6個石子之間的間距太大,沒有可選的方案供青蛙跳躍過去。

思路:

在動態規劃方法中,我們會利用散列表map,對于散列表中的 key:value,key 表示當前石頭的位置,value 是一個包含 jumpsize 的集合,其中每個 jumpsize 代表可以通過大小為jumpysize 的一跳到達當前位置。

首先我們對散列表初始化,key 為所有石頭的位置,除了位置 0 對應的value 為包含一個值 0 的集合以外,其余都初始化為空集。接下來,依次遍歷每個位置上的石頭。對于每個currentPosition,遍歷value 中每個jumpsize,判斷位置currentPosition+newjumpsize 是否存在于map 中,對于每個 jumpsize,newjumpsize 分別為jumpsize?1,jumpsize,jumpsize+1。

如果找到了,就在對應的 value 集合里新增 newjumpsize。重復這個過程直到結束。如果在結束的時候,最后一個位置對應的集合非空,那也就意味著我們可以到達終點,如果還是空集那就意味著不能到達終點。

public class Solution {public boolean canCross(int[] stones) {HashMap<Integer, Set<Integer>> map = new HashMap<>();for (int i = 0; i < stones.length; i++) {map.put(stones[i], new HashSet<Integer>());}map.get(0).add(0);for (int i = 0; i < stones.length; i++) {for (int k : map.get(stones[i])) {for (int step = k - 1; step <= k + 1; step++) {if (step > 0 && map.containsKey(stones[i] + step)) {map.get(stones[i] + step).add(step);}}}}return map.get(stones[stones.length - 1]).size() > 0;}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444913.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444913.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444913.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PaperNotes(8)-Stein Variational Gradient Descent A General Purpose Bayesian Inference Algorithm

通用貝葉斯推理算法-Stein Variational Gradient DescentAbstract1 Introduction2 Background3 Variational Inference Using Smooth Transforms3.1 Stein Operator as the Derivative of KL Divergence定理3.1引理3.23.2 Stein Variational Gradient Descent4 Related Works5 …

thinkphp的增刪改查

ThinkPHP 添加數據 add 方法 ThinkPHP 內置的 add 方法用于向數據表添加數據&#xff0c;相當于 SQL 中的 INSERT INTO 行為。ThinkPHP Insert 添加數據添加數據 add 方法是 CURD&#xff08;Create,Update,Read,Delete / 創建,修改,讀取,刪除&#xff09;中的 Create 的實現&a…

leetcode115 不同的子序列

給定一個字符串 S 和一個字符串 T&#xff0c;計算在 S 的子序列中 T 出現的個數。 一個字符串的一個子序列是指&#xff0c;通過刪除一些&#xff08;也可以不刪除&#xff09;字符且不干擾剩余字符相對位置所組成的新字符串。&#xff08;例如&#xff0c;"ACE" 是…

ThinkPHP 模板循環輸出 Volist 標簽

volist 標簽用于在模板中循環輸出數據集或者多維數組。volist 標簽在模塊操作中&#xff0c;select() 方法返回的是一個二維數組&#xff0c;可以用 volist 直接輸出&#xff1a;<volist name"list" id"vo"> 用 戶 名&#xff1a;{$vo[username]}&l…

MachineLearning(9)-最大似然、最小KL散度、交叉熵損失函數三者的關系

最大似然-最小KL散度-最小化交叉熵損失-三者的關系問題緣起&#xff1a;給定一組數據(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm),希望找到這組數據服從的分布。此種情況下&#xff0c;分布規律用概率密度p(x)表征。 問題歸處&#xff1a;如果能夠建模/近似建模p(x)&#…

ThinkPHP redirect 頁面重定向使用詳解與實例

ThinkPHP redirect 方法ThinkPHP redirect 方法可以實現頁面的重定向&#xff08;跳轉&#xff09;功能。redirect 方法語法如下&#xff1a;$this->redirect(string url, array params, int delay, string msg) 參數說明&#xff1a;url 必須&#xff0c;重定向的 URL 表達…

PaperNotes(9)-Learning deep energy model: contrastive divergence vs. Amortized MLE

Learning deep energy model: contrastive divergence vs. Amortized MLEabstract1 Introduction2 Background2.1 stein variational gradient descent2.2 learning energy model**contrastive Divergence**abstract 受SVGD算法的啟發,本文提出兩個算法用于從數據中學習深度能…

windows下的gvim配置

首要任務是下載安裝Gvim7.3 。 安裝完后&#xff0c;gvim菜單中文出現亂碼&#xff0c;在_vimrcset文件中增加&#xff1a; " 配置多語言環境,解決中文亂碼問題 if has("multi_byte") " UTF-8 編碼 set encodingutf-8 set termencodingutf…

leetcode104 二叉樹的最大深度

給定一個二叉樹&#xff0c;找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。 示例&#xff1a; 給定二叉樹 [3,9,20,null,null,15,7]&#xff0c; 3 / \ 9 20 / \ 15 7 返回它的最大深度…

C++的安全類型轉換的討論

關于強制類型轉換的問題,很多書都討論過,寫的最詳細的是C++ 之父的《C++的設計和演化》。最好的解決方法就是不要使用C風格的強制類型轉換,而是使用標準C++的類型轉換符:static_cast, dynamic_cast。標準C++中有四個類型轉換符:static_cast、dynamic_cast、reinterpret_ca…

PaperNotes(10)-Maximum Entropy Generators for Energy-Based Models

Maximum Entropy Generators for Energy-Based ModelsAbstract1 Introduction2 Background3 Maximum Entropy Generators for Energy-Based Models4 Experiments5 Related Work6 Conclusion7 AcknowledgementsAbstract 由于對數似然梯度的難以計算&#xff0c;能量模型的最大似…

leetcode105 前序中序遍歷序列構造二叉樹

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重復的元素。 例如&#xff0c;給出 前序遍歷 preorder [3,9,20,15,7] 中序遍歷 inorder [9,3,15,20,7] 返回如下的二叉樹&#xff1a; 3 / \ 9 20 / \ 15 7 思路&#xff1a; 1、…

c++的虛擬繼承 的一些思考吧

虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如:類D繼承自類B1、B2,而類B1、B2都繼承自類A,因此在類D中兩次出現類A中的變量和函數。為了節省內存空間,可以將B1、B2對A的繼承定義為虛擬繼承,而A就成了虛擬基類。實現的代碼如下: class A class …

對于linux socket與epoll配合相關的一些心得記錄

對于linux socket與epoll配合相關的一些心得記錄 沒有多少高深的東西&#xff0c;全當記錄&#xff0c;雖然簡單&#xff0c;但是沒有做過測試還是挺容易讓人糊涂的int nRecvBuf32*1024;//設置為32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int))…

leetcode144 二叉樹的前序遍歷

給定一個二叉樹&#xff0c;返回它的 前序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,2,3] 進階: 遞歸算法很簡單&#xff0c;你可以通過迭代算法完成嗎&#xff1f; 思路&#xff1a;模仿遞歸的思路壓棧即可。 /*** Definition for a bi…

AJAX大總結

1、AJAX概述 1.1 什么是AJAX AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻譯成中文就是“異步Javascript和XML”。即使用Javascript語言與服務器進行異步交互&#xff0c;傳輸的數據為XML&#xff08;當然&#xff0c;傳輸的數據不只是XML&#xff09;。 …

我對STL的一些看法(一)初步認識STL

后面一段時間我將會給大家分享我自己學到STL以及應用的時候遇到的問題還有他的一些精髓,可能開始的邏輯會有些亂吧,不過后面還會不斷的整理和優化,讓自己看明白也讓更多的讀者看的清楚。 最近剛閑下來,先說說什么是STL: 不知道你是否有過這樣的經歷。在大學,你準備著手完…

PaperNotes(12)-Autoregressive Quantile networks for generative modeling

Autoregressive Quantile networks for generative modeling3 autoregressive implicit quantiles3 autoregressive implicit quantiles autoregressive&#xff1a;自身做回歸變量&#xff0c;用之前若干時刻的隨機變量 來建模 之后某些時刻 隨機變量的模型。 N維隨機變量的…

我對STL的一些看法(二)認識vector容器

先說vector吧。 C++ Vector(向量容器) 是一個線性順序結構。相當于數組,但其大小可以不預先指定,并且自動擴展。它可以像數組一樣被操作,由于它的特性我們完全可以將vector 看作動態數組。 vector 的數據安排以及操作方式,與 array 非常像似。兩者的唯一差別在于空間的…

git大總結

git init 在本地新建一個repo,進入一個項目目錄,執行git init,會初始化一個repo,并在當前文件夾下創建一個.git文件夾. git clone 獲取一個url對應的遠程Git repo, 創建一個local copy. 一般的格式是git clone [url]. clone下來的repo會以url最后一個斜線后面的名稱命名,創…