力扣209周周赛题解记录(上)
题目思路与算法代码实现复杂度分析
题目
特殊数组的特征值
奇偶树
思路与算法
第一题单纯的暴力就行,应该是可以用二分之类的改善复杂度,没必要赘述,直接上暴力遍历,带注释。第二题典型的按层遍历的BFS,使用队列数据结构实现,自己构建一个带level标签的数据类型比较方便。
代码实现
特殊数组的特征值
class Solution {
public int specialArray(int[] nums
) {
int len
= nums
.length
;
for (int i
= 0; i
<= len
; i
++) {
int cnt
= 0;
for (int num
: nums
) {
if (num
>= i
) {
cnt
++;
}
}
if (cnt
== i
) {
return i
;
}
}
return -1;
}
}
奇偶树
class Solution {
class Mypair{
TreeNode node
;
int index
;
Mypair(TreeNode node
,int index
){
this.node
= node
;
this.index
= index
;
}
}
public boolean isEvenOddTree(TreeNode root
) {
Queue
<Mypair> queue
= new ArrayDeque<>();
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;
}
if (cur
!= tmpIndex
) {
if (tmpIndex
% 2 == 0) {
pre
= Integer
.MIN_VALUE
;
} else {
pre
= Integer
.MAX_VALUE
;
}
cur
= tmpIndex
;
}
if (cur
% 2 == 0) {
if (tmpNode
.val
% 2 == 0 || tmpNode
.val
<= pre
) {
return false;
}
} else if (cur
% 2 != 0) {
if (tmpNode
.val
% 2 != 0 || tmpNode
.val
>= pre
) {
return false;
}
}
pre
= tmpNode
.val
;
queue
.add(new Mypair(tmpNode
.left
, tmpIndex
+1));
queue
.add(new Mypair(tmpNode
.right
, tmpIndex
+1));
}
return true;
}
}
复杂度分析
第一题复杂度为O(N²),树的复杂度不做讨论。
转载请注明原文地址:https://blackberry.8miu.com/read-35916.html