滑动窗口一题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言


一、题目

二、代码

第一轮找数,第二轮扩充

java 复制代码
class Solution {
    public List<Integer> findClosestElements(int[] arr, int k, int x) {
        int l=0,r=0,i=1;
        int n=arr.length;
        List<Integer> a1=new ArrayList<Integer>();
        while(n>1 && r-l+1<=k && i<n){
            if(arr[i-1]==arr[i]){
                i++;
                continue;
            }
            if(Math.abs(arr[i-1]-x)<=Math.abs(arr[i]-x)){
                r=i-1;
                l=r;//偏左
                break;
            }else{
                i++;
            }
        }
       if(i!=n) {
            a1.add(arr[r]);
        }else {
            r=i-1;
            l=r;
            a1.add(arr[n-1]);
        }
        while(a1.size()<k){
            if(l-1<0){
                a1.add(arr[r+1]);
                r++;
                continue;
            }
            if(r+1==n){
                a1.add(0,arr[l-1]);
                l--;
                continue;
            }
            if(Math.abs(arr[l-1]-x)<=Math.abs(arr[r+1]-x)){
                a1.add(0,arr[l-1]);
                l--;
            }else{
                a1.add(arr[r+1]);
                r++;
            }
        }
        return a1;
    }
}

总结

写的不好,暂时还没发现原因。

这题是定长数组。

现在开始看标答,发现原因。

思路都差不多,1.确定好下标后依次加入2.ArrayList.add(0,arr[i])会移动一次全部元素,也就是头插不好。

相关推荐
AI_Ming1 分钟前
Seq2Seq-大模型知识点(程序员转行AI大模型学习)
算法·ai编程
毕设源码-郭学长7 分钟前
【开题答辩全过程】以 某某协会管理与展示平台为例,包含答辩的问题和答案
java
若水不如远方8 分钟前
分布式一致性(六):拥抱可用性 —— 最终一致性与 Gossip 协议
分布式·后端·算法
计算机安禾11 分钟前
【C语言程序设计】第35篇:文件的打开、关闭与读写操作
c语言·开发语言·c++·vscode·算法·visual studio code·visual studio
多云的夏天13 分钟前
docker容器部署-windows-ubuntu
java·docker·容器
Wect20 分钟前
React Hooks 核心原理
前端·算法·typescript
庞轩px21 分钟前
内存区域的演进与直接内存——JVM性能优化的权衡艺术
java·jvm·笔记·性能优化
美式请加冰27 分钟前
字符串的介绍和使用
算法
北顾笙98030 分钟前
测开准备-day03数据结构力扣
数据结构
m0_7336122133 分钟前
C++20概念(Concepts)入门指南
开发语言·c++·算法