Skip to content

Commit 98d1c33

Browse files
committed
modify code
1 parent 61c9cbd commit 98d1c33

12 files changed

+113
-11
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package class091;
2+
3+
import java.util.HashMap;
4+
5+
// 两个0和1数量相等区间的最大长度
6+
// 给出一个长度为n的01串,现在请你找到两个区间
7+
// 使得这两个区间中,1的个数相等,0的个数也相等
8+
// 这两个区间可以相交,但是不可以完全重叠,即两个区间的左右端点不可以完全一样
9+
// 现在请你找到两个最长的区间,满足以上要求
10+
// 返回区间最大长度
11+
// 来自真实大厂笔试,没有在线测试,对数器验证
12+
public class Code06_LongestSameZerosOnes {
13+
14+
// 暴力方法
15+
// 为了验证
16+
public static int len1(int[] arr) {
17+
HashMap<Integer, HashMap<Integer, Integer>> map = new HashMap<>();
18+
for (int i = 0; i < arr.length; i++) {
19+
int zero = 0;
20+
int one = 0;
21+
for (int j = i; j < arr.length; j++) {
22+
zero += arr[j] == 0 ? 1 : 0;
23+
one += arr[j] == 1 ? 1 : 0;
24+
map.putIfAbsent(zero, new HashMap<>());
25+
map.get(zero).put(one, map.get(zero).getOrDefault(one, 0) + 1);
26+
}
27+
}
28+
int ans = 0;
29+
for (int zeros : map.keySet()) {
30+
for (int ones : map.get(zeros).keySet()) {
31+
int num = map.get(zeros).get(ones);
32+
if (num > 1) {
33+
ans = Math.max(ans, zeros + ones);
34+
}
35+
}
36+
}
37+
return ans;
38+
}
39+
40+
// 正式方法
41+
// 时间复杂度O(n)
42+
public static int len2(int[] arr) {
43+
int leftZero = -1;
44+
int rightZero = -1;
45+
int leftOne = -1;
46+
int rightOne = -1;
47+
for (int i = 0; i < arr.length; i++) {
48+
if (arr[i] == 0) {
49+
leftZero = i;
50+
break;
51+
}
52+
}
53+
for (int i = 0; i < arr.length; i++) {
54+
if (arr[i] == 1) {
55+
leftOne = i;
56+
break;
57+
}
58+
}
59+
for (int i = arr.length - 1; i >= 0; i--) {
60+
if (arr[i] == 0) {
61+
rightZero = i;
62+
break;
63+
}
64+
}
65+
for (int i = arr.length - 1; i >= 0; i--) {
66+
if (arr[i] == 1) {
67+
rightOne = i;
68+
break;
69+
}
70+
}
71+
int p1 = rightZero - leftZero;
72+
int p2 = rightOne - leftOne;
73+
return Math.max(p1, p2);
74+
}
75+
76+
// 为了验证
77+
public static int[] randomArray(int len) {
78+
int[] ans = new int[len];
79+
for (int i = 0; i < len; i++) {
80+
ans[i] = (int) (Math.random() * 2);
81+
}
82+
return ans;
83+
}
84+
85+
// 为了验证
86+
public static void main(String[] args) {
87+
int N = 500;
88+
int testTimes = 500;
89+
System.out.println("测试开始");
90+
for (int i = 0; i < testTimes; i++) {
91+
int n = (int) (Math.random() * N) + 2;
92+
int[] arr = randomArray(n);
93+
int ans1 = len1(arr);
94+
int ans2 = len2(arr);
95+
if (ans1 != ans2) {
96+
System.out.println("出错了!");
97+
}
98+
}
99+
System.out.println("测试结束");
100+
}
101+
102+
}

src/class093/Code01_MinimizeDeviation.java renamed to src/class092/Code01_MinimizeDeviation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package class093;
1+
package class092;
22

33
import java.util.TreeSet;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package class093;
1+
package class092;
22

33
import java.util.Arrays;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package class093;
1+
package class092;
22

33
import java.util.List;
44
import java.util.TreeSet;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package class093;
1+
package class092;
22

33
// 知识竞赛
44
// 最近部门要选两个员工去参加一个需要合作的知识竞赛,

src/class093/Code05_DivideArrayIncreasingSequences.java renamed to src/class092/Code05_DivideArrayIncreasingSequences.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package class093;
1+
package class092;
22

33
// 将数组分成几个递增序列
44
// 给你一个 非递减 的正整数数组 nums 和整数 K

src/class093/Code06_MinimumNumberRefuelingStops.java renamed to src/class092/Code06_MinimumNumberRefuelingStops.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package class093;
1+
package class092;
22

33
import java.util.PriorityQueue;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package class092;
1+
package class093;
22

33
// 跳跃游戏II
44
// 给定一个长度为n的0索引整数数组nums,初始位置为nums[0]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package class092;
1+
package class093;
22

33
// 灌溉花园的最少水龙头数目
44
// 在x轴上有一个一维的花园,花园长度为n,从点0开始,到点n结束
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package class092;
1+
package class093;
22

33
// 过河问题
44
// 有一个大晴天,Oliver与同学们一共N人出游

0 commit comments

Comments
 (0)