【LeetCode】挑戰100天 Day12(熱題+面試經典150題)
- 一、LeetCode介紹
- 二、LeetCode 熱題 HOT 100-14
- 2.1 題目
- 2.2 題解
- 三、面試經典 150 題-14
- 3.1 題目
- 3.2 題解
一、LeetCode介紹
LeetCode是一個在線編程網站,提供各種算法和數據結構的題目,面向程序員、計算機科學專業學生和技術愛好者等人群,旨在幫助他們提高算法和編程技能。LeetCode上的問題通常來自各種技術公司的面試題目,因此它也是程序員面試準備的重要資源之一。
LeetCode上的問題涵蓋了各種難度級別,從入門級到專家級都有不同難度的題目可供練習。用戶可以選擇使用不同的編程語言提交答案,LeetCode能夠對結果進行評估并返回測試結果。
除了題目外,LeetCode還提供了討論區、排行榜等社區功能,用戶可以在這里交流學習心得、解決疑難問題,并與其他用戶比較自己的做題成績。
挑戰100天 AI In LeetCode是基于LeetCode題庫,借助AI的能力進行解題、并學習其解題過程。
二、LeetCode 熱題 HOT 100-14
2.1 題目
最長公共前綴
編寫一個函數來查找字符串數組中的最長公共前綴。如果不存在公共前綴,返回空字符串 ""。示例 1:輸入:strs = ["flower","flow","flight"]
輸出:"fl"
示例 2:輸入:strs = ["dog","racecar","car"]
輸出:""
解釋:輸入不存在公共前綴。提示:1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 僅由小寫英文字母組成
2.2 題解
解題思路:
我們可以將字符串數組中的第一個字符串作為基準字符串,然后逐個比較每個字符串的前綴是否與基準字符串相同,如果不同則縮短基準字符串的長度,一直到找到公共前綴為止。
具體實現步驟如下:
- 判斷輸入的字符串數組是否為空或長度是否為0,若是則返回空字符串。
- 將字符串數組中的第一個字符串賦值給一個變量 prefix。
- 遍歷字符串數組中的每個字符串,比較該字符串與 prefix 的公共前綴,如果不匹配,則將 prefix 的長度縮短,繼續比較,直到找到公共前綴或 prefix 變為空字符串。
- 返回 prefix。
public class Solution {public String longestCommonPrefix(String[] strs) {if (strs == null || strs.length == 0) {return "";}String prefix = strs[0];for (int i = 1; i < strs.length; i++) {while (strs[i].indexOf(prefix) != 0) {prefix = prefix.substring(0, prefix.length() - 1);if (prefix.isEmpty()) {return "";}}}return prefix;}
}
三、面試經典 150 題-14
數組 / 字符串
3.1 題目
加油站
在一條環路上有 n 個加油站,其中第 i 個加油站有汽油 gas[i] 升。你有一輛油箱容量無限的的汽車,從第 i 個加油站開往第 i+1 個加油站需要消耗汽油 cost[i] 升。你從其中的一個加油站出發,開始時油箱為空。給定兩個整數數組 gas 和 cost ,如果你可以按順序繞環路行駛一周,則返回出發時加油站的編號,否則返回 -1 。如果存在解,則 保證 它是 唯一 的。示例 1:輸入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
輸出: 3
解釋:
從 3 號加油站(索引為 3 處)出發,可獲得 4 升汽油。此時油箱有 = 0 + 4 = 4 升汽油
開往 4 號加油站,此時油箱有 4 - 1 + 5 = 8 升汽油
開往 0 號加油站,此時油箱有 8 - 2 + 1 = 7 升汽油
開往 1 號加油站,此時油箱有 7 - 3 + 2 = 6 升汽油
開往 2 號加油站,此時油箱有 6 - 4 + 3 = 5 升汽油
開往 3 號加油站,你需要消耗 5 升汽油,正好足夠你返回到 3 號加油站。
因此,3 可為起始索引。
示例 2:輸入: gas = [2,3,4], cost = [3,4,3]
輸出: -1
解釋:
你不能從 0 號或 1 號加油站出發,因為沒有足夠的汽油可以讓你行駛到下一個加油站。
我們從 2 號加油站出發,可以獲得 4 升汽油。 此時油箱有 = 0 + 4 = 4 升汽油
開往 0 號加油站,此時油箱有 4 - 3 + 2 = 3 升汽油
開往 1 號加油站,此時油箱有 3 - 3 + 3 = 3 升汽油
你無法返回 2 號加油站,因為返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
因此,無論怎樣,你都不可能繞環路行駛一周。提示:gas.length == n
cost.length == n
1 <= n <= 105
0 <= gas[i], cost[i] <= 104
3.2 題解
解題思路:
可以使用一個變量來跟蹤當前剩余的油量,以及另一個變量來跟蹤從起始加油站到當前加油站的總油量差值。具體步驟如下:
- 初始化兩個變量:start 表示起始加油站的索引,total 表示累計的油量與消耗量之差。
- 初始化 currGas 和 totalGas 為 0。
- 遍歷加油站數組 gas 和消耗數組 cost,對于每個加油站 i:
- 將 currGas 加上 gas[i] - cost[i],表示到達該加油站后剩余的油量與消耗量之差。
- 將 totalGas 加上 gas[i] - cost[i],表示從起始加油站到當前加油站的總油量差值。
- 如果 currGas 小于 0,則將 start 設為下一個加油站的索引,并將 currGas 清零。
- 遍歷結束后,判斷 totalGas 的值是否小于 0,如果是則返回 -1,否則返回 start。
public class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int start = 0; // 起始加油站的索引int currGas = 0; // 當前剩余的油量int totalGas = 0; // 從起始加油站到當前加油站的總油量差值for (int i = 0; i < gas.length; i++) {currGas += gas[i] - cost[i];totalGas += gas[i] - cost[i];if (currGas < 0) {start = i + 1;currGas = 0;}}// 判斷是否可以繞環路行駛一周if (totalGas < 0) {return -1;} else {return start;}}
}
至此,挑戰100天 AI In LeetCode Day12(熱題+面試經典150題)完成,后續會持續調整;查閱過程中若遇到問題歡迎留言或私信交流。