哈哈,今天整活上癮了.
複習了一下最近兩場周賽感覺能做出來但是實際沒有做出來的題目
感覺有幾點不足,希望以後可以逐漸改過來:
1. 基礎知識不紮實,有時候會在細節上栽跟頭
2. 有時候容易腦子一熱,想到一部分就開始寫,簡單題還能處理,中等或困難就有點難搞了,太區域性,不全面
3. 心態還是需要調整一下,不能提交沒過就心裡有點緊張~~
希望今年內可以ak一次吧,哈哈,加油,廢話不多,上題目。
199期 第三題
給你二叉樹的根節點 root 和乙個整數 distance 。
如果二叉樹中兩個 葉 節點之間的 最短路徑長度 小於或者等於 distance ,那它們就可以構成一組 好葉子節點對 。
返回樹中 好葉子節點對的數量 。
二狗把做題的一些感想和思路也寫在注釋裡了,所以就直接上**吧:
`using csharpleetcode.common;
namespace csharpleetcode.core
private pair dfs(treenode root, int distance)
int leftdepth = new int[distance + 1];
int rightdepth = new int[distance + 1];
int leftcount = 0;
int rightcount = 0;
//分別計算左右子樹
if (root.left != null)
if (root.right != null)
//注意這裡結合depth的定義,這裡計算的時當前結點為根的子樹的 到當前結點長度為n的 葉子結點的個數
//如果這個結點有子樹,它一定不是葉子結點,也就沒有必要計算 i = 0的情況,此外,還要額外加上1 為p的子樹到p的距離.
for (int i = 0; i < distance; i++)
int count = 0;
//排列組合,注意這裡計算的都是當前結點為根的子樹中的好結點對數,且一定是乙個是在左子樹,乙個在右子樹.
for (int i = 0; i <= distance; i++)
}//注意這裡的count + leftcount + rightcount
//其中count是p的好結點對個數,leftcount是p的左子樹的對個數,rightcount類似.
return new pair(depth, count + leftcount + rightcount);
}#region 沒完成的code
//下面注釋掉的是參賽時的**:
/*dictionary, int> dic = new dictionary, int>();
public int countpairs(treenode root, int distance)
public int getresult(treenode root, int height)
}if (root.left != null)
result += getresult(root.left, height);
if (root.right != null)
result += getresult(root.right, height);
return result;
}public listgetleaf(treenode root, int height)
if (root.left != null)
if (root.right != null)
return result;}*/
#endregion
}/// /// 注意這個類 用於描述某個子數的根結點的相關資訊
/// depth[i] 代表葉子結點到當前子樹結點p的距離為i的葉子節點個數。例如 depth[2] = 1 代表到p的距離為2的葉子結點的個數為1
/// count 代表以當前結點p為根的樹中,好結點的對數
///
public class pair
}}`200期 第三題
5477. 排布二進位制網格的最少交換次數
給你乙個 n x n 的二進位制網格 grid,每一次操作中,你可以選擇網格的 相鄰兩行 進行交換。
乙個符合要求的網格需要滿足主對角線以上的格仔全部都是 0 。
請你返回使網格滿足要求的最少操作次數,如果無法使網格符合要求,請你返回 -1 。
主對角線指的是從 (1, 1) 到 (n, n) 的這些格仔。
n == grid.length
n == grid[i].length
1 <= n <= 200
grid[i][j] 要麼是 0 要麼是 1 。
一樣,上**:
`namespace csharpleetcode.core
else
}array[i] = count;
}//記錄一下交換順序
int result = 0;
for (int i = 0; i < n - 1; i++)
else //需要交換的情況
//找不到滿足條件的結果了,直接判斷不能完成,返回-1
if (j == n)
return -1;
for (; j > i; j--)}}
return result;
}}#region 比賽版本
/* 先貼乙個沒有完成的版本吧。感覺還是沒有適應比賽的狀態,和某位大佬的思路開頭幾乎一毛一樣。
可惜後來為啥想不開要去套個氣泡排序,哈哈哈
public class solution
else
else}}
}int remind = 0;
for (int i = n - 1; i >= 1; i--)
else if (dict.containskey(i))
else if (!dict.containskey(i) && remind > 0)
}int result = 0;
for (int i = 0; i < n - 1; i ++)}}
return result;
}} */
#endregion}
`
網路部分 刷題
http協議規定了瀏覽器如何請求資料,伺服器如何響應資料 get和post請求 1 get使用url cookie傳參,請求引數拼接至url後面 post使用body傳參,請求data拼接至請求主體中 2 get的url有長度限制 post可以傳輸很多資料 3 post請求更安全 同源策略限制了從同...
leetcode刷題總結 6 10題
六 zigzag conversion 本題屬於比較簡單的,很容易就能總結出規律。乙個zigzag數以2 numrows 2為乙個迴圈,每乙個豎行的字母下標為乙個cycle,除了第一行和最後一行,中間各行都要加乙個j cycle 2 i i為從零開始的行號,j為每個迴圈裡i cycle n.clas...
Leetcode刷題(簡單題2019 9 3)
當然慢慢的從第一道開始刷咯,用的是python3刷的,c 的太難了,不過也會看。第一題是兩數之和,題目如下 這道題我當時是想用兩個for迴圈暴力求解,然後發現如果其中有乙個數自加得到target的值,這索引就不好處理了。最終選擇用hash表來做,如下 class solution def twosu...