Skip to content

Commit d0aa02a

Browse files
committed
some update
1 parent 6517bb6 commit d0aa02a

4 files changed

+109
-4
lines changed

1248-统计「优美子数组」.java

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// 给你一个整数数组 nums 和一个整数 k。
2+
// 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。
3+
// 请返回这个数组中「优美子数组」的数目。
4+
5+
// 示例 1:
6+
// 输入:nums = [1,1,2,1,1], k = 3
7+
// 输出:2
8+
// 解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。
9+
10+
// 示例 2:
11+
// 输入:nums = [2,4,6], k = 1
12+
// 输出:0
13+
// 解释:数列中不包含任何奇数,所以不存在优美子数组。
14+
15+
// 示例 3:
16+
// 输入:nums = [2,2,2,1,2,2,1,2,2,2], k = 2
17+
// 输出:16
18+
//  
19+
// 提示:
20+
// 1 <= nums.length <= 50000
21+
// 1 <= nums[i] <= 10^5
22+
// 1 <= k <= nums.length
23+
class Solution {
24+
private int cnt;
25+
26+
public int numberOfSubarrays(int[] nums, int k) {
27+
var oddNum = new int[nums.length];
28+
if (nums[0] % 2 == 0) {
29+
oddNum[0] = 0;
30+
nums[0] = 0;
31+
} else {
32+
oddNum[0] = 1;
33+
nums[0] = 1;
34+
}
35+
var i = 1;
36+
while (i < nums.length) {
37+
if (nums[i] % 2 != 0) {
38+
oddNum[i] = oddNum[i - 1] + 1;
39+
nums[i] = 1;
40+
} else {
41+
oddNum[i] = oddNum[i - 1];
42+
nums[i] = 0;
43+
}
44+
i++;
45+
}
46+
47+
var left = 0;
48+
var right = 0;
49+
while (right < nums.length) {
50+
var n = 0;
51+
if (left == 0) {
52+
n = nums[right];
53+
} else {
54+
n = nums[right] - nums[left - 1];
55+
}
56+
57+
if (n != k) {
58+
right++;
59+
continue;
60+
}
61+
62+
var r = right;
63+
while (right < nums.length && nums[right] == 0) {
64+
right++;
65+
}
66+
67+
var l = left;
68+
if (nums[l] == 0) {
69+
while (nums[left] == 0) {
70+
left++;
71+
}
72+
}else{
73+
left=l+1;
74+
}
75+
76+
cnt += (right - r) * (left - l);
77+
}
78+
79+
return cnt;
80+
}
81+
82+
public static void main(String[] args) {
83+
var a = new Solution();
84+
a.numberOfSubarrays(new int[] { 1, 1, 2, 1, 1 }, 3);
85+
}
86+
}

310-最小高度树.kt

+21-3
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,10 @@ class Solution {
5151
}
5252

5353
val queue = LinkedList<Int>()
54-
degree.forEach {
55-
if (it == 1) {
56-
queue.add(it)
54+
degree.forEachIndexed {
55+
index, i ->
56+
if (i == 1) {
57+
queue.add(index)
5758
}
5859
}
5960

@@ -75,4 +76,21 @@ class Solution {
7576

7677
return res
7778
}
79+
80+
81+
}
82+
fun main(){
83+
val p =Array(5){IntArray(2) }
84+
p[0][0]=0
85+
p[0][1]=3
86+
p[1][0]=1
87+
p[1][1]=3
88+
p[2][0]=2
89+
p[2][1]=3
90+
p[3][0]=4
91+
p[3][1]=3
92+
p[4][0]=5
93+
p[4][1]=4
94+
95+
Solution(). findMinHeightTrees(6,p)
7896
}

450-删除二叉搜索树中的节点.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
// 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
1+
// 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,
2+
// 并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
23

34
// 一般来说,删除节点可分为两个步骤:
45
// 首先找到需要删除的节点;
File renamed without changes.

0 commit comments

Comments
 (0)