当前位置: 首页 > article >正文

leetcode01——27. 移除元素(双指针)、977. 有序数组的平方(双指针)、209. 长度最小的子数组(双指针/滑动窗口)

27. 移除元素

/**
定义快慢指针,均从0开始,fast向后移动,遇到不为删除值的就停下,将值赋值给slow,slow++
遇到等于目标值就直接跳过,不等于目标值就赋值,这样就能 过滤掉(也就是删除掉)目标值
 */
class Solution {
    public int removeElement(int[] nums, int val) {
        int fast = 0;
        int slow = 0;
        for (fast = 0; fast < nums.length; fast++) {
            if (nums[fast] != val) {
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;
    }
}

977. 有序数组的平方

/**
双指针
    因为非递减排序的数组中有负数,因此不能直接就平方然后排序
    但是平方后数组两端的数据一定是最大的(如:-5,1,3,6)
    因此定义左右两个指针,判断平方后的数的大小,将大的放在新数组的末尾
 */
class Solution {
    public int[] sortedSquares(int[] nums) {
        int left = 0;
        int len = nums.length;
        int right = len-1;
        int[] newNums = new int[len];

        // 类似二分查找的思路
        while (left <= right) {
            if (nums[left]*nums[left] < nums[right]*nums[right]) {
                newNums[len-1] = nums[right]*nums[right];
                right--;
            } else {
                newNums[len-1] = nums[left]*nums[left];
                left++;
            }
            len--;
        }
        return newNums;
    }
}

209. 长度最小的子数组

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int res = Integer.MAX_VALUE;
        int sum = 0; //滑动窗口数值之和
        int i = 0; //滑动窗口的起始位置
        int subLength = 0; //滑动窗口的长度

        for (int j = 0; j < nums.length; j++) {
            sum += nums[j];
            // 注意这里使用while,每次更新 i(起始位置),并不断比较子序列是否符合条件
            while (sum >= target) {
                subLength = (j - i + 1); //取子序列长度
                res = res < subLength ? res : subLength;
                sum -= nums[i++]; //这里体现出滑动窗口的精髓之处,不断变更i(子序列的起始位置)
            }
        }
        // 如果res0没有被赋值的话,就返回0,说明没有符合条件的子序列
        return res == Integer.MAX_VALUE ? 0 : res;
    }
}

参考内容:代码随想录


http://www.kler.cn/news/305255.html

相关文章:

  • 准备好启程了:Nuro将授权其自动驾驶系统
  • 北斗盒子:海上安全的智能守护者——落水报警应用案例
  • GO Govaluate
  • 38. 如何在Spring Boot项目中集成MyBatis-Plus?
  • 信通院发布首个《大模型媒体生产与处理》标准,阿里云智能媒体服务作为业界首家“卓越级”通过
  • redis 中缓存 百万级别表的查询数据 出错:Query execution was interrupted
  • 添加选择登录ssh终端
  • RAPIDS AI 加速制造业预测性维护效率
  • 51单片机-蜂鸣器制作音乐(小星星天空之城)
  • 【python因果推断库15】使用 sci-kit learn 模型进行回归断点分析
  • Linux基础-Makefile的编写、以及编写第一个Linux程序:进度条(模拟在 方便下载的同时,更新图形化界面)
  • ubuntu 22.04 ~24.04 如何修改登录背景
  • 【JavaScript】LeetCode:707设计链表
  • Python版《天天酷跑+源码》,详细讲解,手把手教学-python游戏开发
  • jmeter设置全局token
  • (180)时序收敛--->(30)时序收敛三十
  • 大模型教程:使用 Milvus、vLLM 和 Llama 3.1 搭建 RAG 应用
  • 怎么让手机ip地址变化?介绍几种实用方法
  • uniapp 微信小程序自定义tabbar层级低于canvas解决方案
  • 见刊丨“GPU池化”术语发布
  • 本地内存和分布式缓存(面试)
  • Python Web 开发中的性能优化策略(二)
  • git 命令---想要更改远程仓库
  • 指针与函数传递
  • C++速通LeetCode简单第12题-二叉树的直径
  • 深度学习-目标检测(四)-Faster R-CNN
  • C#实现串口中继
  • 不废话简单易懂的Selenium 页面操作与切换
  • Python实现一个简单的爬虫程序(爬取图片)
  • postgresql 导出CSV格式数据