2024/10/28 灵茶题单 不定长滑动窗口
This commit is contained in:
parent
faeab03adb
commit
4f174d3f05
|
@ -0,0 +1,60 @@
|
||||||
|
package com.cool.ling_cha_mount.sliding_windows;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created with IntelliJ IDEA.
|
||||||
|
*
|
||||||
|
* @Author: Cool
|
||||||
|
* @Date: 2024/10/28/14:44
|
||||||
|
* @Description: 2831. 找出最长等值子数组
|
||||||
|
* @Score 1976
|
||||||
|
*/
|
||||||
|
public class Num2831 {
|
||||||
|
public int longestEqualSubarray(List<Integer> nums, int k) {
|
||||||
|
//计算以nums.get(left)起的最长等值子数组
|
||||||
|
int left = 0;
|
||||||
|
int[] arr = new int[nums.size() + 1];
|
||||||
|
int res = 0;
|
||||||
|
//用num来计算当前滑动窗口内有多少个数字不等于nums.get(left)
|
||||||
|
int num = 0;
|
||||||
|
for (int i = 0; i < nums.size(); i++) {
|
||||||
|
++arr[nums.get(i)];
|
||||||
|
if (!Objects.equals(nums.get(i), nums.get(left))) {
|
||||||
|
//若不相等则+1
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
//若不等于nums.get(left)的数字超过了k,说明删除所有nums.get(left)以外的数字后仍然存在不相等的数字,那么移动窗口的最左端
|
||||||
|
while (num > k) {
|
||||||
|
arr[nums.get(left)]--;
|
||||||
|
left++;
|
||||||
|
//重新计算当前有多少个数字不等于nums.get(left)
|
||||||
|
num = i - left + 1 - arr[nums.get(left)];
|
||||||
|
}
|
||||||
|
res = Math.max(res, i - left + 1 - num);
|
||||||
|
}
|
||||||
|
//仅计算到第left个数字,在left后可能还存在多个数字,因此要继续计算,不计算最后一个数字的原因是他的长度为1,为最短的,因此可以不计算,并且避免了出现越界的情况
|
||||||
|
while (left < nums.size() - 1) {
|
||||||
|
arr[nums.get(left)]--;
|
||||||
|
left++;
|
||||||
|
num = nums.size() - left - arr[nums.get(left)];
|
||||||
|
res = Math.max(res, nums.size() - left - num);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
List<Integer> objects = new ArrayList<>();
|
||||||
|
objects.add(1);
|
||||||
|
objects.add(2);
|
||||||
|
objects.add(2);
|
||||||
|
objects.add(4);
|
||||||
|
longestEqualSubarray(objects, 0);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue