## 題目1:[5479. 千位分隔數](
思路:模擬
簽到題,把整數變為字串,從後向前遍歷,每三位加點即可。
**:
class solution
reverse(res.begin(), res.end());
return res;
}};
複雜度分析:
簡單遍歷,時間複雜度o(n);
記錄結果字串,空間複雜度o(n)。
思路:字串遍歷
簽到題2。
要求最少的點能到達其他所有點,找到所有入度為0的點即可。
**:
class solution
vectorres;
for (int i = 0; i < n; ++i)
if (u[i] == 0) res.push_back(i);
return res;
}};
複雜度分析:
遍歷陣列,時間複雜度為o(n);
空間複雜度為o(n)。
思路:簡單遍歷
倒推,求最少的「單個元素減一」和「全部元素除2」的操作次數使得陣列元素全部變為0。
不妨乙個乙個元素考慮:
每乙個元素的減1過程都是單獨進行的,所以如果當前元素是奇數,就必須要進行減一操作,最後需要將所有元素的減一操作次數相加;
而每個元素的除2操作是整個陣列共同進行的,而某乙個元素變成0之後,其他元素再怎麼折騰,不管多少次除2操作都不會對這個元素有影響,所以最後只需要求出所有元素的除二次數的最大值。
**:
class solution else
}pos = max(pos, now); // 除2次數
}res += pos;
return res;
}};
複雜度分析:
陣列遍歷,時間複雜度為o(n);
維護兩個變數,空間複雜度為o(1)。
思路:深度優先搜尋
要在二維地圖裡尋找某種不重複路徑,且需要判斷全部路徑中是否有滿足條件(即成環)的路徑,用深度優先搜尋。
判斷環路,說明最後要回到之前遍歷過的某一點,為了防止最後兩個點來回搜尋,要在引數中記錄父節點(即探索當前位置的前乙個位置)。
實現細節:
深搜過程中,首先判斷拓展節點與父節點是否相同,若相同說明搜尋在兩個點來回進行,直接pass掉。
其次判斷拓展節點是否已經遍歷過,若遍歷過且不為父節點,說明找到了之前遍歷過的某一點,滿足成環條件,返回 tru
etrue
true
。若沒有遍歷過,則對拓展節點進行新一次的深度優先搜尋。若所有拓展節點都深搜完成且未找到成環路徑,則返回 fal
se
false
false 。
**:
class solution ;
int dy[4] = ;
bool in_grid(int x, int y)
bool dfs(int x, int y, int fx, int fy, vector>& grid, vector>& visit)
if(in_grid(nx, ny) && grid[nx][ny] == grid[x][y])
if(dfs(nx, ny, x, y, grid, visit)) }}
return false;
}bool containscycle(vector>& grid) }}
}return false;
}};
複雜度分析:
深度優先搜尋,總時間複雜度為o(nm);
維護遍歷過程記錄表,空間複雜度為o(nm)。
leetcode第8場雙周賽
這次雙周賽有意外,第二第三題按照提示返回int會報錯,要返回list 第一題給你乙個字串 s,返回只含 單一字母 的子串個數。示例 1 輸入 aaaba 輸出 8 解釋 只含單一字母的子串分別是 aaa aa a b aaa 出現 1 次。aa 出現 2 次。a 出現 4 次。b 出現 1 次。所以...
leetcode第 24 場雙周賽
給你乙個整數陣列nums。你可以選定任意的正數startvalue 作為初始值。你需要從左到右遍歷nums陣列,並將 startvalue 依次累加上nums陣列中的值。請你在確保累加和始終大於等於 1 的前提下,選出乙個最小的正數作為 startvalue 輸入 nums 3,2,3,4,2 輸出...
leetcode 第27場雙周賽
通過翻轉子陣列使兩個陣列相等 檢查乙個字串是否包含所有長度為k的二進位制子串 課程安排 摘櫻桃 3分 簡單 4分 中等 5分 中等 6分 困難 翻譯下題意,其實就是問我們兩個陣列是否相等,判斷陣列是否相等有很多方法,這邊我直接排序,遍歷一遍看是否有不一樣的元素 陣列排序的複雜度,故為o nlogn ...