第一题
思路:单调栈(从后向前)
public class 第一题02 {
public static void main(String[] args) {
int[] arr = {6,7,5,5,5,5};
int res = minTurns2(arr);
System.out.println(res);
}
public static int minTurns2(int[] arr){
int n = arr.length;
int[][] stack = new int[n][2];
int stack_index = 0;
int ans = 0;
for (int i = n - 1;i >= 0;i--){
int cur = 0;
while (stack_index > 0 && stack[stack_index - 1][0] < arr[i]){
stack_index--;
cur = Math.max(cur + 1,stack[stack_index][1]);
}
stack[stack_index][0] = arr[i];
stack[stack_index][1] = cur;
stack_index++;
ans = Math.max(ans,cur);
}
return ans;
}
}
第二题
public class 第二题02 {
public static void main(String[] args) {
char[] str = {'a','x','y','x','b','y'};
int res = splitSameNumberWays(str);
System.out.println(res);
}
public static int splitSameNumberWays(char[] str){
if (str == null || str.length == 0){
return 0;
}
int n = str.length;
int x_all = 0;
int y_all = 0;
for (int i = 0;i < n;i++){
if (str[i] == 'x'){
x_all++;
}
if (str[i] == 'y'){
y_all++;
}
}
int ans = 0;
int cur_x = 0;
int cur_y = 0;
for (int i = 0;i < n;i++){
if (str[i] == 'x'){
cur_x++;
}
if (str[i] == 'y'){
cur_y++;
}
if (cur_x == cur_y || (x_all - cur_x) == (y_all - cur_y)){
ans++;
}
}
return ans;
}
}