//执行用时:14 ms, 在所有 Java 提交中击败了97.36%的用户//内存消耗:50 MB, 在所有 Java 提交中击败了45.06%的用户//通过测试用例:51 / 51//滑动窗口+hashset---------------------通过publicstaticbooleancontainsNearbyDuplicate1(int[] nums,int k){Set<Integer> set =newHashSet<Integer>();for(int i =0; i < nums.length; i++){if(i > k){
set.remove(nums[i - k -1]);//不断删除滑动窗口的首元素}if(!set.add(nums[i])){//假如在窗口中有重复的元素返回false----!false--》true---返回truereturntrue;//因为abs(i - j) <= k----所以要判断添加进窗口内部的所有元素--有重复则满足}}returnfalse;}
1208. 尽可能使字符串相等
//执行用时:6 ms, 在所有 Java 提交中击败了60.47%的用户//内存消耗:41.5 MB, 在所有 Java 提交中击败了5.10%的用户//通过测试用例:37 / 37publicstaticintequalSubstring(String s,String t,int maxCost){int[] num =newint[s.length()];for(int i =0; i < s.length(); i++){
num[i]=Math.abs(s.charAt(i)- t.charAt(i));}int max =0;//统计长度int sum =0;int start =0;//前指针int end =0;//后指针while(end < s.length()){
sum += num[end];while(sum > maxCost){//超过就判断
sum = sum - num[start];//从头删除符合条件的元素
start++;}
max =Math.max(max,end-start +1);
end++;//一直跑指针}return max;}
//执行用时:2 ms, 在所有 Java 提交中击败了100.00%的用户//内存消耗:48.9 MB, 在所有 Java 提交中击败了94.67%的用户//通过测试用例:127 / 127//滑动窗口----通用模板publicstaticdoublefindMaxAverage(int[] nums,int k){int sum =0;for(int i =0; i < k; i++){
sum += nums[i];//定义一个滑动窗口}int max = sum;for(int i = k; i < nums.length; i++){
sum = sum - nums[i - k]+ nums[i];//减去窗口的第一个值并加上下一个值----达到移动窗口
max =Math.max(max, sum);}return(double) max /(double)k;}
1423. 可获得的最大点数
//执行用时:2 ms, 在所有 Java 提交中击败了77.13%的用户//内存消耗:49.8 MB, 在所有 Java 提交中击败了5.26%的用户//通过测试用例:40 / 40//滑动窗口publicstaticintmaxScore(int[] cardPoints,int k){int sum =0;for(int i =0;i < k;i++){//维护个窗口---先装右边的
sum+=cardPoints[i];}int max = sum;for(int i =0;i < k-1;i++){//拿左边的后面的值 与 右边的值互换取最大值
sum = sum - cardPoints[k-1-i]+ cardPoints[cardPoints.length-1-i];
max =Math.max(max,sum);}return max;}