C++
LeetCode
Medium
要找最短距離
因此使用 BFS
把 queue 裡面的位置 pop 出來處理
處理完之後把這個位置可以通往的下一個位置 push 進 queue 裡
需要注意的是
單純使用 BFS 會得到 time limit excced
還需要維護一個陣列紀錄已經被踩過的位置
因為如果有一個位置已經被踩過
之後又被踩一次
第二次踩到的路徑必定是相等或是更長
因此如果發現踩到的位置已經被踩過
那這個位置不需要處理
只需要跳過就好
#include <queue>
#include <vector>
#include <iostream>
using namespace std;
int jump(vector<int>& nums);
int main()
{
vector<int> nums = {2, 3, 1, 1, 4};
cout << jump(nums) << endl;
return 0;
}
int jump(vector<int>& nums)
{
vector<int> stepOnIt;
queue<int> q;
int len = nums.size();
int currentPos = 0;
int available = 0;
int jumps = 0;
int qLen = 0;
int next = 0;
if(len == 0) return 0;
q.push(0);
stepOnIt.assign(len, 0);
while(1)
{
qLen = q.size();
for(int i = 0; i < qLen; i++)
{
currentPos = q.front();
q.pop();
if(currentPos == len - 1) return jumps;
available = nums[currentPos];
for(int j = 1; j <= available; j++)
{
next = currentPos + j;
if(next < len && stepOnIt[next] == 0)
{
stepOnIt[next] = 1;
q.push(next);
}
}
}
jumps++;
}
return jumps;
}
1 - 100 1. Two Sum 2. Add Two Numbers 3. Longest Substring Without Repeating Characters 5. Longest Palindromic Substring 6. Zigzag Conversion 7. Reverse Integer 8. String to Integer (atoi) 9. Palindrome Number
Dec 1, 2022Notes vector 裡存的是路徑行經的檔案夾名稱 往下一層資料夾往下走就 push 進 vector 如果遇到 .. 就把尾端的檔案夾名稱 pop 掉 Code #include <vector> #include <string> #include "cout.h"
Nov 30, 2022Notes 向右轉 k 個代表倒數第 k 個 node 要做新的 head 第 k - 1 個 node 要成為新的尾端, next 指向 null 原本的尾端變成一個普通的 node, next 指向原本的 head Code #include "cout.h" ListNode* rotateRight(ListNode* head, int k);
Nov 29, 2022Notes 使用 DP + memo 可以避免重複計算 memo[x][y] 指的是從位置 (0, 0) 到位置 (x, y) 所需要花費的最少的錢 Code #include <vector> #include <algorithm> #include <climits> #include "cout.h"
Nov 29, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up