avatar
文章
325
標籤
86
分類
15

首頁
文章
標籤
分類
關於
Larry's notes
搜尋
首頁
文章
標籤
分類
關於
LeetCode - 497 解題紀錄 / August LeetCoding Challenge Day 22
發表於2020-08-22|LeetCode
題目: LeetCode - 497. Random Point in Non-overlapping Rectangles 題目說明給一個陣列代表矩形的左下角座標及右上角座標,所有矩形都不會重疊。要求完成一個函式能隨機取一個在矩形內的點。 解題思路 Solution(vector<vector<int>>& rects): 先使用一個陣列紀錄到目前的矩形總共有多少的點,方便做隨機取樣。 vector<int> pick(): 隨機取一個小於點的數量的數,接著找出它位於第幾個矩形,接著在該矩形內隨機取一點即可。 參考解法12345678910111213141516171819202122232425// fast IOstatic auto __ = [](){ std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); return 0;}();class Solution &# ...
LeetCode - 905 解題紀錄 / August LeetCoding Challenge Day 21
發表於2020-08-21|LeetCode
題目: LeetCode - 905. Sort Array By Parity 題目說明給一個陣列,要求將陣列重新排序,使得偶數的元素都在前面的部份,奇數都在後面的部份。 解題思路遍歷整個陣列,使用雙指針,當碰到偶數就將它跟前面的值交換即可。 參考解法1234567class Solution {public: vector<int> sortArrayByParity(vector<int>& A) { for(int l = 0, r = 0; r < A.size(); ++r) if(!(A[r] % 2)) swap(A[l++], A[r]); return A; }};
LeetCode - 143 解題紀錄 / August LeetCoding Challenge Day 20
發表於2020-08-20|LeetCode
題目: LeetCode - 143. Reorder List 題目說明給一個 List,依照題目的要求重新排序。※ 題目規定不能改變 node 的值。 解題思路我們先取得中間的節點 ( 方法可以參考本篇文章:LeetCode - 876 解題紀錄 ),接著將中間到尾端的節點反轉,最後依照要求重新連接即可。 參考解法12345678910111213141516171819202122232425262728293031323334353637class Solution {public: void reorderList(ListNode* head) { if(!head) return; auto mid = findMid(head), l1 = head, l2 = mid->next; mid->next = nullptr; l2 = _reverse(l2); while(l1 && l2) { au ...
LeetCode - 824 解題紀錄 / August LeetCoding Challenge Day 19
發表於2020-08-19|LeetCode
題目: LeetCode - 824. Goat Latin 題目說明給一個字串,將字串中的每個單詞拆開並根據題目的規則修改單詞的內容。規則如下: 若是單詞的開頭為母音則在單詞的結尾加上 "ma"。 若是單詞的開頭不為母音則將單詞的開頭移到單詞的結尾並加上 "ma"。 在第一個單詞的結尾加上 'a',第二的單詞的結尾加上 "aa"…。 解題思路題目的三個規則可以簡化成兩個步驟: 若是單詞的開頭不為母音則將單詞的開頭移到單詞的結尾。 在單詞的結尾加上 "ma" 及對應數量的 'a'。 定義一個 String _append 作為每次都必須加上的結尾,使用 StringStream 將字串的單詞拆開,每次先判斷單詞的開頭是否不為母音,若是的話就將開頭移到結尾,最後加上 _append 及更新 _append 即可。 參考解法123456789101112131415class Solution {public: string toGoatLatin(str ...
LeetCode - 967 解題紀錄 / August LeetCoding Challenge Day 18
發表於2020-08-18|LeetCode
題目: LeetCode - 967. Numbers With Same Consecutive Differences 題目說明給兩個整數,N 代表位數,K 代表兩個數字的差,求為 N 位數且鄰近兩個數值的差為 K 的所有數。 解題思路當我們要在一個數後面添加一位數字時,那個數字一定是原本數的最後一位數加 K 或減 K,依照此想法使用遞迴填完數字即可。需要注意的是當 N 為 1 時答案為 {0, 1, 2, ..., 9},所以需要放入 0。而當 K 為 0 時,l + k 會等於 l - k,所以要排除避免出現兩個相同的數字。 參考解法1234567891011121314151617class Solution {public: vector<int> numsSameConsecDiff(int N, int K) { vector<int> v; if(N == 1) v.emplace_back(0); for(int i = 1; i <= 9; + ...
LeetCode - 1103 解題紀錄 / August LeetCoding Challenge Day 17
發表於2020-08-18|LeetCode
題目: LeetCode - 1103. Distribute Candies to People 題目說明給兩個整數,candies 表示糖果的數量,num_people 表示糖果要分給的人數。分糖果的規則為 12345678910num_people = 4candies = 40 i: 0 1 2 3people: 1 2 3 4----------------------round 1 1 2 3 4 每個人分到的糖果數: i + 1 + 0 * num_peopleround 2 5 6 7 8 每個人分到的糖果數: i + 1 + 1 * num_peopleround 3 4 每個人分到的糖果數: i + 1 + 2 * num_people 當糖果數量不夠時就全部給當前的那個人即可---------------------- 10 8 10 12 回傳一個代表每個人收到糖果數量的陣列。 解題思路可以直接模擬每次發放糖果的情況,但是效率較低,我們 ...
LeetCode - 123 解題紀錄 / August LeetCoding Challenge Day 16
發表於2020-08-18|LeetCode
題目: LeetCode - 123. Best Time to Buy and Sell Stock III 題目說明給一個陣列代表每日的股票價格,求買賣兩次後的最高收益。當手上有一支股票時就無法買第二支股票。 解題思路動態規劃,轉移方程為: 1234cost1 = min(p, cost1);profit1 = max(p - cost1, profit1);cost2 = min(p - profit1, cost2);profit2 = max(p - cost2, profit2); 將 profit1 的收益與 cost2 結合,profit2 即為最後的總收益, 參考解法123456789101112131415class Solution {public: int maxProfit(vector<int>& prices) { int cost1 = INT_MAX, cost2 = INT_MAX; int profit1 = 0, profit2 = 0; for(aut ...
LeetCode - 5 解題紀錄
發表於2020-08-15|LeetCode
題目: LeetCode - 5. Longest Palindromic Substring 題目說明給一個字串,求此字串最長的回文子字串。 解題思路回文的形式有兩種,一種是奇數個數,一種是偶數個數,所以我們使用一個迴圈遍歷 s,嘗試將字串中的每個端點當作回文的中間並找出回文的長度,找出最長的長度並記錄起始點即可。 參考解法12345678910111213141516171819202122class Solution {public: string longestPalindrome(string s) { _s = s, n = s.size(); int len = INT_MIN, start, curLen; for(int i = 0; i < n; ++i) { curLen = max(getLength(i, i), getLength(i, i + 1)); if(curLen > len) len = curL ...
LeetCode - 435 解題紀錄 / August LeetCoding Challenge Day 15
發表於2020-08-15|LeetCode
題目: LeetCode - 435. Non-overlapping Intervals 題目說明給一個二維陣列代表區間,求需要刪除多少個區間使得區間中沒有交集。( 需要刪除最少的區間 ) 解題思路為了方便計算,我們先將區間依照右端點以小到大排序。接著選定一個區間,然後計算右邊的區間和目前區間交集的個數,這些都是需要刪除的區間,接著將目前區間換成目前找到不交集的區間,重複做此步驟即可。 參考解法12345678910111213141516class Solution { static bool cmp(const vector<int>& l, const vector<int>& r) { return l[1] < r[1]; }public: int eraseOverlapIntervals(vector<vector<int>>& intervals) { int count = 0, n = intervals.size() ...
LeetCode - 409 解題紀錄 / August LeetCoding Challenge Day 14
發表於2020-08-15|LeetCode
題目: LeetCode - 409. Longest Palindrome 題目說明給一個字串,求字串中的所有字元能組成的最大回文長度。 解題思路回文的形式有兩種,一種是奇數個數,一種是偶數個數,而奇數個數的形式就是偶數個數加上任意一個字元,所以我們先計算每個字元出現的次數,再判斷所有字元裡面是否有出現奇數個數的次數,最後將次數加入長度即可。 參考解法12345678910class Solution {public: int longestPalindrome(string s) { int l = 0, odd = 0; unordered_map<char, int> _m; for(auto c : s) ++_m[c]; for(auto m : _m) { if(m.second % 2) odd = 1; l += m.second / 2 * 2; } return l + odd; }};
1…222324…33
avatar
Larry Lai
文章
325
標籤
86
分類
15
Follow Me
最新評論
正在載入中...
分類
  • 1091DataStructures-YzuCse13
  • 1091LinearAlgebra-YzuCse5
  • 1092IntroductionToAlgorithms-YzuCse12
  • Bitwise1
  • C++5
  • Data Mining1
  • Design Pattern2
  • Hexo1
標籤
0-1 Knapsack AI Anaconda Articulation Points BFS Back Tracking Bellman Ford Bitwise Butterfly C++ CPE - 2020/06/09 CPE - 2020/10/20 CPE - 2020/12/22 Coin Change Computational Geometry Convex Hull DFS Data Mining Deep Learning Design Pattern Dijkstra Dinic Divide and Conquer Dynamic Programming Edmonds-Karp FPS Floyd Cycle Detection Algorithm Floyd-Warshall Graham Scan Graph Hexo Index Sort Kadane Kaggle Kruskcal LDS LIS LeetCode LeetCode - Easy LeetCode - Hard
文章
  • 七月 20235
  • 六月 20231
  • 三月 20231
  • 二月 20231
  • 一月 20231
  • 十一月 20223
  • 十月 20222
  • 七月 20225
網站資訊
文章數目 :
325
已運行時間 :
本站總字數 :
118k
最後更新時間 :
User Map
©2020 - 2023 By Larry Lai
本地搜尋