2024/10/20 灵茶题单 不定长滑动窗口
This commit is contained in:
parent
5be658d1f4
commit
95f3ae0c49
|
@ -0,0 +1,57 @@
|
||||||
|
package com.cool.ling_cha_mount.sliding_windows;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created with IntelliJ IDEA.
|
||||||
|
*
|
||||||
|
* @Author: Cool
|
||||||
|
* @Date: 2024/10/20/19:36
|
||||||
|
* @Description:
|
||||||
|
*/
|
||||||
|
public class Num904 {
|
||||||
|
public int totalFruit(int[] fruits) {
|
||||||
|
//记录第一种水果最后一次出现的索引
|
||||||
|
int i = 0;
|
||||||
|
//记录第二种水果最后一次出现的索引
|
||||||
|
int j = 0;
|
||||||
|
//最长长度
|
||||||
|
int res = 0;
|
||||||
|
//记录窗口起始位置
|
||||||
|
int left = 0;
|
||||||
|
//找到第二种水果
|
||||||
|
for (int m = 1; m < fruits.length; m++) {
|
||||||
|
if (fruits[m] != fruits[0]) {
|
||||||
|
//找到第二种水果,更新第二种水果最后一次出现的索引
|
||||||
|
j = m;
|
||||||
|
break;
|
||||||
|
}else{
|
||||||
|
//若一直都是一种水果则更新第一种水果最后一次出现的索引
|
||||||
|
i=m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int m = j + 1; m < fruits.length; m++) {
|
||||||
|
//若出现第三种水果
|
||||||
|
if (fruits[m] != fruits[i] && fruits[m] != fruits[j]) {
|
||||||
|
//更新长度
|
||||||
|
res = Math.max(m - left, res);
|
||||||
|
//第一种水果最后一次出现的索引+1必定是第二种水果,所以将起始位置更新为i+1
|
||||||
|
left = i+1;
|
||||||
|
//出现新的水果后,原先的第二种水果则变成第一种水果
|
||||||
|
i = j;
|
||||||
|
} else if (fruits[m] == fruits[i]) {
|
||||||
|
//若出现的水果为第一种水果,则第一种水果变成第二种水果,第二种水果变成第一种水果
|
||||||
|
i = j;
|
||||||
|
}
|
||||||
|
//将第二种水果最后一次出现的索引更新为当前位置
|
||||||
|
j = m;
|
||||||
|
}
|
||||||
|
//计算长度
|
||||||
|
res = Math.max(res, j - left + 1);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void test(){
|
||||||
|
totalFruit(new int[]{3,3,3,1,2,1,1,2,3,3,4});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue