LeetCode刷題 部分周賽題

2021-10-22 18:51:33 字數 3095 閱讀 1263

哈哈,今天整活上癮了.

複習了一下最近兩場周賽感覺能做出來但是實際沒有做出來的題目

感覺有幾點不足,希望以後可以逐漸改過來:

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...