文章目录
T1.5531.特殊数组的特征值1.题目描述2.示例3.思路及代码
T2:5532.奇偶数1.题目描述2.示例:3.思路及代码
T1.5531.特殊数组的特征值
1.题目描述
给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。
注意: x 不必 是 nums 的中的元素。
如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。
2.示例
示例 1:
输入:nums = [3,5]
输出:2
解释:有 2 个元素(3 和 5)大于或等于 2 。
示例 2:
输入:nums = [0,0]
输出:-1
解释:没有满足题目要求的特殊数组,故而也不存在特征值 x 。
如果 x = 0,应该有 0 个元素 >= x,但实际有 2 个。
如果 x = 1,应该有 1 个元素 >= x,但实际有 0 个。
如果 x = 2,应该有 2 个元素 >= x,但实际有 0 个。
x 不能取更大的值,因为 nums 中只有两个元素。
示例 3:
输入:nums = [0,4,3,0,4]
输出:3
解释:有 3 个元素大于或等于 3 。
示例 4:
输入:nums = [3,6,7,7,0]
输出:-1
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 1000
3.思路及代码
思路:这题给的范围很小,直接暴力解决就好了
class Solution {
public int specialArray(int[] nums
) {
Arrays
.sort(nums
);
List
<Integer> list
= new ArrayList<>();
for(int i
= 0; i
<= nums
[nums
.length
- 1]; i
++){
int count
= 0;
for(int j
= 0; j
< nums
.length
; j
++){
if(nums
[j
] >= i
){
count
++;
}
}
if(count
== i
){
list
.add(i
);
}else{
count
= 0;
}
}
if(list
.size() == 1){
return list
.get(0);
}else{
return -1;
}
}
}
T2:5532.奇偶数
1.题目描述
如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。
2.示例:
3.思路及代码
思路:利用二叉树层次遍历,加入lists之后,进行对应的判断即可代码:
class Solution {
public boolean isEvenOddTree(TreeNode root
) {
if (root
== null
) return true;
List
<List
<Integer>> lists
= new ArrayList<>();
Queue
<TreeNode> q
= new LinkedList<>();
q
.offer(root
);
while (!q
.isEmpty()) {
int s
= q
.size();
List
<Integer> l
= new ArrayList<>();
for (int k
= 0; k
< s
; k
++) {
TreeNode cur
= q
.poll();
l
.add(cur
.val
);
if (cur
.left
!= null
) {
q
.offer(cur
.left
);
}
if (cur
.right
!= null
) {
q
.offer(cur
.right
);
}
}
lists
.add(l
);
}
for (int i
= 0; i
< lists
.size(); i
++) {
if (i
% 2 == 0) {
if (lists
.get(i
).get(0) % 2 == 0) return false;
for (int k
= 1; k
< lists
.get(i
).size(); k
++) {
if (lists
.get(i
).get(k
) <= lists
.get(i
).get(k
- 1)) return false;
if (lists
.get(i
).get(k
) % 2 == 0) return false;
}
}
else {
if (lists
.get(i
).get(0) % 2 == 1) return false;
for (int k
= lists
.get(i
).size() - 1; k
> 0; k
--) {
if (lists
.get(i
).get(k
) >= lists
.get(i
).get(k
- 1)) return false;
if (lists
.get(i
).get(k
) % 2 == 1) return false;
}
}
}
return true;
}
}