20201007:力扣209週週賽題解記錄(上)
題目
-
- 特殊陣列的特徵值
- 特殊陣列的特徵值
-
- 奇偶樹
- 奇偶樹
思路與演算法
- 第一題單純的暴力就行,應該是可以用二分之類的改善複雜度,沒必要贅述,直接上暴力遍歷,帶註釋。
- 第二題典型的按層遍歷的BFS,使用佇列資料結構實現,自己構建一個帶level標籤的資料型別比較方便。
程式碼實現
-
- 特殊陣列的特徵值
class Solution {
public int specialArray(int[] nums) {
int len = nums.length;
// 遍歷,特徵值最大為len
for (int i = 0; i <= len; i++) {
// 清零計數
int cnt = 0;
// 判斷陣列比當前i大的值有幾個,直到找到那個符合條件的,則為特徵值
for (int num : nums) {
if (num >= i) {
cnt++;
}
}
if (cnt == i) {
return i;
}
}
return -1;
}
}
-
- 奇偶樹
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
// 自定義工具類儲存節點和當前level
class Mypair{
TreeNode node;
int index;
Mypair(TreeNode node,int index){
this.node = node;
this.index = index;
}
}
public boolean isEvenOddTree(TreeNode root) {
// 新建佇列將其level也傳入
Queue<Mypair> queue = new ArrayDeque<>();
// root的level為0
queue.add(new Mypair(root,0));
int pre = Integer.MIN_VALUE;
int cur = -1;
while (!queue.isEmpty()) {
// 獲取隊首的節點和索引進行判斷
Mypair tmp = queue.poll();
TreeNode tmpNode = tmp.node;
int tmpIndex = tmp.index;
// 一定記得處理這個特殊情況
if (tmpNode == null) {
continue;
}
// 層之間的轉移情況,根據層的奇偶性來初始化pre
if (cur != tmpIndex) {
// 偶數層和奇數層因為排序的要求,更新並設定不同的pre
if (tmpIndex % 2 == 0) {
pre = Integer.MIN_VALUE;
} else {
pre = Integer.MAX_VALUE;
}
cur = tmpIndex;
}
// 如果當前層數為偶數層
if (cur % 2 == 0) {
// 偶數層若出現偶數或不符合單調遞增,則返回false
if (tmpNode.val % 2 == 0 || tmpNode.val <= pre) {
return false;
}
// 如果當前層數為奇數層
} else if (cur % 2 != 0) {
// 奇數層若出現奇數或不符合單調遞減,則返回false
if (tmpNode.val % 2 != 0 || tmpNode.val >= pre) {
return false;
}
}
// 一輪結束將已遍歷的節點設為pre
pre = tmpNode.val;
// 剩下的BFS即可
queue.add(new Mypair(tmpNode.left, tmpIndex+1));
queue.add(new Mypair(tmpNode.right, tmpIndex+1));
}
return true;
}
}
複雜度分析
- 第一題複雜度為O(N²),樹的複雜度不做討論。
相關文章
- 【每週例題】力扣 C++ 字串相乘力扣C++字串
- 力扣題解力扣
- 2024.4 第一週做題記錄
- 20201124:力扣第216場周賽(上)力扣
- 第 178 場力扣周賽 第二題力扣
- python力扣刷題記錄——771. 寶石與石頭Python力扣
- python力扣刷題記錄——1470. 重新排列陣列Python力扣陣列
- 第三週放歌記錄
- 放歌記錄(第一週)
- python力扣刷題記錄——1614. 括號的最大巢狀深度Python力扣巢狀
- 《記錄部落格一週年》
- 力扣題解1-兩數之和力扣
- 力扣題解2-兩數相加力扣
- 力扣刷題Python筆記:括號生成力扣Python筆記
- python力扣刷題記錄——1480. 一維陣列的動態和Python力扣陣列
- java學習記錄第八週Java
- java學習記錄第七週Java
- java學習記錄第三週Java
- 主題搗鼓日記(週記)
- 第二週週記
- 力扣刷題筆記:207. 課程表力扣筆記
- 力扣前1500道非會員題刷題筆記力扣筆記
- 詳解Vue生命週期【上】Vue
- 20201125:力扣第216場周賽(下)力扣
- 18. 寫篇部落格,記錄方法 返回記錄,和類 生命週期的問題
- 週記_
- 週記
- 力扣題之迴文數力扣
- 第一週週記總結
- Beta階段——第十週Scrum Meeting記錄Scrum
- Spark記錄(二):Spark程式的生命週期Spark
- PHP 第三週函式學習記錄PHP函式
- PHP 第二週函式學習記錄PHP函式
- PHP 第十週函式學習記錄PHP函式
- PHP 第七週函式學習記錄PHP函式
- PHP 第五週函式學習記錄PHP函式
- PHP 第六週函式學習記錄PHP函式
- PHP 第一週函式學習記錄PHP函式