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