代码随想录算法训练营第一天

2023-10-27

LeetCode704 力扣

* 基础二分法

* 考虑如何不让数据溢出,区间如何切换

* LeetCode34 力扣寻找最左区间 和 最右区间,套路和基础二分法类似,就是要在找到target的时候继续向左或者向右移动

package algor.trainingcamp;

/**
 * @author lizhe
 * @version 1.0
 * @description: https://leetcode.cn/problems/binary-search/
 *
 * 二分法
 * @date 2023/4/5 09:45
 */
public class LeetCode704 {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;

        while(left <= right){
            int mid = left + ((right - left) >> 1);

            if(nums[mid] < target){
                //值偏小,向右取
                left = mid + 1;
            }else if(nums[mid] > target){
                //偏大,向左取
                right = mid - 1;
            }else{
                return mid;
            }
        }

        return -1;
    }

    /**
     * 找到最左的含义是: 即便找到了目标值,还是需要继续向左寻找(right边界向左)
     */
    public int searchLeft(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;

        while(left <= right){
            int mid = left + ((right - left) >> 1);

            if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] > target){
                right = mid - 1;
            }else{
                //即便target值相等 还是需要继续向左
                right = mid - 1;
            }
        }

        return left;
    }

    /**
     * 找到最右的含义是: 即便找到了目标值,还是需要继续向右寻找(left边界向右)
     */
    public int searchRight(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;

        while(left <= right){
            int mid = left + ((right - left) >> 1);

            if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] > target){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }

        return right;
    }

    public static void main(String[] args) {
        LeetCode704 demo = new LeetCode704();
        System.out.println(demo.search(new int[]{-1, 0,3, 5, 9, 12}, 3));
    }
}

LeetCode 27 力扣

1. 暴力解法: 外层循环遍历数组,如果发现出现需要替换的值,将后续的值均都往前赋值(本意是向前提一位,但是操作上是赋值,需要将末值进行忽略)

2. 双指针: 快指针遍历数组,找到无需移除的元素,慢指针原地更新

package algor.trainingcamp;

/**
 * @author lizhe
 * @version 1.0
 * @description: https://leetcode.cn/problems/remove-element/ 移除元素
 * @date 2023/4/5 10:17
 *
 */
public class LeetCode27 {
    /**
     * 1. 暴力做法,当发现存在目标值,将目标值后面的所有数都往前挪一位(需要注意每次数据的长度变化)
     */
    public int removeElement(int[] nums, int val) {
        int size = nums.length;
        for(int i = 0;i < size;i++){
            if(nums[i] == val){
                for(int j = i + 1;j < size;j++){
                    nums[j - 1] = nums[j];
                }

                /**
                 * 忽略了i--操作,这里简单做一下3,2,2,3的debug
                 * 由于在代码中做的是'赋值'操作,因此每一次需要对末尾的数进行忽略,使用'i--'进行忽略
                 * 3,2,2,3 -> 2,2,3,3-> 2,2,3,3(数组情况)
                 * 3,2,2,3 -> 2,2,3 -> 2,2(有效数据)
                 */
                i--;
                size--;
            }


        }

        return size;
    }

    /**
     * 双指针
     * 明确快慢指针的定义
     * fast: 寻找新数组的元素
     * slow: 遍历旧数组,实时生成新数组 新数组的范围[0, slow]
     */
    public int removeElement2(int[] nums, int val){
        int slow = 0;
        for(int fast = 0;fast < nums.length;fast++){
            if(nums[fast] != val){
                //实时刷新数组
                nums[slow++] = nums[fast];
            }
        }
        return slow;
    }

    public static void main(String[] args) {
        LeetCode27 demo = new LeetCode27();
        System.out.println(demo.removeElement2(new int[]{3,2,2,3}, 3));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码随想录算法训练营第一天 的相关文章

  • SPNEGO 密码身份验证问题

    我已将我的应用程序配置为通过 SPNEGO 与 Websphere 使用 Kerberos 身份验证 这是详细信息 krb5 conf libdefaults default realm ABC MYCOMPANY COM default
  • java.lang.VerifyError:JVMVRFY012堆栈形状不一致;

    在 WAS 8 5 5 中部署 Maven 项目时出现以下错误 我在WAS中安装了JDK 1 6和1 7 错误500 org springframework web util NestedServletException 处理程序处理失败
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • 在 jTextfield 中禁用“粘贴”

    我有一个用 Swing awt 编写的应用程序 我想阻止用户将值粘贴到文本字段中 有没有办法在不使用动作监听器的情况下做到这一点 您可以使用 null 参数调用 setTransferHandler 如下所示 textComponent s
  • 如何在url请求中发送数组

    我的要求如下 我想给出演员姓名 开始日期 结束日期并获取他在该时期出演的所有电影 因此 我的服务请求是这样的 http localhost 8080 MovieDB GetJson name Actor startDate 20120101
  • 如何作为应用程序发布到页面?

    所以 我有一个应用程序 Facebook 应用程序实体 并且我有一个页面 我想使用应用程序通过java代码 通过restfb或任何其他建议 发布到页面 看起来我错过了页面授予应用程序发布权限的阶段 不知道该怎么做 谢谢你们 乌里 您只能 作
  • 本地开发的 Azure Functions 扩展包版本问题

    我有一个带有队列触发器的 Java 11 Azure 函数 该函数在部署到 Azure 时按预期工作 并正确从定义的服务总线主题中提取消息 但是 运行相同的功能locally除非我回滚版本 否则不起作用Azure Functions 绑定扩
  • 在哪里保存选项值、重要文件的路径等[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在创建一个程序 需要设置一些选项值以及图像文件的一些路径 SQLite 数据库的路径 有关各种按钮上文本的一些信息 有关要使用哪个数据库的信
  • 确定序列化对象的类型

    我需要通过套接字发送消息 从用户到引擎的请求 以及从引擎到用户的响应 所以流程本质上是 serialized request Server lt network gt Client serialized response request r
  • 如何将 Java 地图转换为在 Scala 中使用?

    我正在开发一个 Scala 程序 该程序调用 Java 库中的函数 处理结果并生成 CSV 有问题的 Java 函数如下所示 Map
  • Java:SortedMap、TreeMap、可比较?如何使用?

    我有一个对象列表 需要根据其中一个字段的属性进行排序 我听说 SortedMap 和 Comparator 是实现此目的的最佳方法 我是否要与正在排序的类实现 Comparable 还是创建一个新类 如何实例化 SortedMap 并传入
  • 具有 JPA 持久性的 Spring 状态机 - 存储库使用

    我试图弄清楚如何轻松使用 Spring 状态机 包括使用 JPA 进行持久化 这是我正在处理的问题 不兼容的数据类型 工厂和持久性 在程序的某个时刻 我想使用连接到用户的状态机 有用于此目的的存储库 项目spring statemachin
  • 插入时的 iBatis 判别器

    我有一个抽象类Example以及与之相伴的具体子类 我使用鉴别器来提取数据out数据库的 像这样
  • 正确签名的 JNLP 应用程序无法在 Java 7 中运行

    我有一个 JNLP 应用程序 由于证书过期需要更新 我有一个经过 CA 验证的新证书 我已将新证书导入到我的密钥库中 我已导入完整的证书链 我的构建文件对构建中的 jar 进行签名和时间戳
  • 在带有 Protocol Buffers 的项目中使用 Proguard 有什么特点?

    我有一个使用 Google Protocol Buffers 的项目 一旦我尝试用 ProGuard 对其进行混淆 似乎 protobuf 会导致问题 我将所有自己的类打包成mybuildedclasses jar 谷歌代码被打包成prot
  • 如何从字符串中解析一个大整数? [复制]

    这个问题在这里已经有答案了 我有一个这样的方法 Integer parseInt myInt 不是这个整数变得很长 我得到以下异常 java lang NumberFormatException For input string 40001
  • BadPaddingException:无效的密文

    我需要一些帮助 因为这是我第一次编写加密代码 加密代码似乎工作正常 但解密会引发错误 我得到的错误是 de flexiprovider api exceptions BadPaddingException 无效的密文 in the 解密函数
  • javax.media.jai 类的公共下载?

    这是一个非常简单的问题 我一直在寻找可以下载 javax media jai 库的地方 我找到了 jai imageio 库 但是我发现的所有其他 jai 内容要么已经过时 2008 年及之前 然后我遇到了登录屏幕 是否有 javax me
  • java中使用多线程调用同一类的不同方法

    我有一个类 如下所示 具有三种方法 public class MyRunnable implements Runnable Override public void run what code need to write here to c
  • 让 Hibernate 和 SQL Server 与 VARCHAR 和 NVARCHAR 良好配合

    我目前正在大型数据库的某些表中启用 UTF 8 字符 这些表已经是 MS SQL 类型 NVARCHAR 此外 我还有几个使用 VARCHAR 的字段 Hibernate 与 JDBC 驱动程序的交互存在一个众所周知的问题 例如 参见在 h

随机推荐

  • opencv图像处理及视频处理基本操作

    计算机眼中的图像由一个个像素组成 每个像素点的值在0 255之间 代表像素点的亮度 0为最暗 255为最亮 通常彩色图为三通道 灰度图 黑白图 为单通道 彩色图像包括三个颜色通道 B G R 分别表示蓝 绿 红 目录 1 图像的表示 2 图
  • html超链接打开共享文件夹,访问共享文件夹的方法

    在局域网 我们经常会用到共享文件 这样在多人传输文件跟共享资料上就会又方便又快捷啦 在这里教大家怎样建立跟访问共享文件夹 打开控制面板 找到防火墙 点击打开防火墙 弹出防火墙设置面板 我们选择关闭防火墙 虽然写不推荐 但我们可以无视它 然后
  • 抖音自动生成文字_文字动画怎么制作?这里教你一键制作抖音爆款文字视频

    现在很多人都会在闲暇时间打开抖音刷刷视频 经常会看到很多文字视频特别有趣 配上动感的节奏 文字立刻鲜活起来 如何才能制作出这样的文字视频呢 今天给大家介绍一种全网最简单的抖音文字视频制作方法 不需要会使用AE 甚至也不需要你打字 直接语音识
  • 关于python基础,90%的人不知道这些。但你一定得清楚。

    经过前几次的学习我们已经安装好Python解释器 搭建好顺手的IDE环境 那么接下来 我们就正式的开始一些列Python知识的学习 代码敲起来 一 字面量 字面量是以变量或常量给出的原始数据 在Python中 有多种类型的字面量 如数字字面
  • linux中断实验

    文章目录 一 linux中断简介 1 linux中断API函数 1 中断号 2 request irq函数 3 free irq 4 中断处理函数 5 中断使能与禁止函数 2 上半部与下半部 1 软中断 2 tasklet 3 工作队列 3
  • jboss源码中片段分析

    package com test import java security AccessController import java security PrivilegedAction import java util ArrayList
  • QRegExp

    d 非负整数 正整数 0 0 9 1 9 0 9 正整数 d 0 非正整数 负整数 0 0 9 1 9 0 9 负整数 d 整数 d d 非负浮点数 正浮点数 0 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1
  • post使用方法以及有道API

    import requests import json headers User Agent Mozilla 5 0 Windows NT 10 0 Win64 x64 AppleWebKit 537 36 KHTML like Gecko
  • Unity人物前进的方向和相机朝向一致

    鼠标点击滑动移动相机 代码 using UnityEngine using System Collections This is an improved orbit script based on the MouseOrbitImprove
  • 数据结构-图的应用算法

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 最小生成树 1 1 Prim算法 1 2 Kruskal算法 二 最短路径 2 1 Dijkstra算法 2 2 Floyd算法 三 有向无环图描述表达式 四
  • Angular 使用MockJs

    今天要做模拟数据 但是发现没有说这个问题的帖子 特此记录分享一下 如果有用Angular的朋友刚好遇到这个问题 希望可以帮你解决 第一步 安装mockjs npm install mockjs save 第二步 引入mockjs 在 ang
  • Python学习笔记(十三)————循环语句相关

    目录 1 while循环 2 for循环 3 range语句 4 while与for区别 5 循环中断 break和continue 1 while循环 1 while的条件需得到布尔类型 True表示继续循环 False表示结束循环 2
  • 「OceanBase 4.1 体验」OceanBase 4.1社区版的部署及使用体验

    OceanBase 4 1 体验 OceanBase 4 1社区版的部署及使用体验 一 前言 1 1 本次实践介绍 1 2 本次实践目的 二 准备环境资源 2 1 部署前需准备工作 2 2 本地环境规划 三 部署Docker环境 3 1 安
  • 栈,堆,堆栈,队列

    堆栈都是一种数据项按序排列的数据结构 只能在一端 称为栈顶 top 对数据项进行插入和删除 要点 堆 顺序随意 栈 后进先出 Last In First Out 堆 什么是堆 又该怎么理解呢 堆通常是一个可以被看做一棵树的数组对象 堆总是满
  • ViewPager2 + SmartRefreshLayout + RecyclerView出现底部自动回弹显示问题,显示不全

    ViewPager2 SmartRefreshLayout RecyclerView出现底部自动回弹显示问题 显示不全 出现这个问题的原因是RecyclerView的高度超过了父控件的高度 我也不知道为啥 只是测试出来的结果 解决办法 pr
  • 【python基础知识】15.编码基础知识

    编码基础知识 前言 编码 二进制 编码表 encode 和decode 前言 在你的网络冲浪生涯里 我想你或多或少有这样的疑问 为什么传说中只能读懂0和1的计算机能显示如此五花八门的内容 为什么明明办的100兆的宽带 撑死就只有10几兆的下
  • ubuntu18.04 android studio无法使用中文输入法

    1 找到电脑安装的输入法框架 打开系统输入法 查看当前选择的输入法框架 这说明当前使用的是ibus 输入法框架 2 设置studio sh 使用输入法框架 在studio sh 的文件注释行下面 该文件的最前明 添加输入法 export X
  • iOS获取App ipa包 2019-02-12

    转自 https www jianshu com p 8eaa1dd20370 首先 去Mac上的App Store下载Apple Configurator 2 然后把iphone连接上Mac 点击Apple Configurator 2
  • 汽配企业WMS系统:提升作业效率与过程管控

    随着汽配企业竞争的加剧和业务模式的复杂化 许多企业意识到提高仓库作业效率和成本控制能力是企业成功的关键 因此 越来越多的企业选择引入WMS仓储管理系统 然而 汽配企业产品复杂 且从业的人员大部分是老一辈人员 内部信息化程度低 因此需要建立更
  • 代码随想录算法训练营第一天

    LeetCode704 力扣 基础二分法 考虑如何不让数据溢出 区间如何切换 LeetCode34 力扣寻找最左区间 和 最右区间 套路和基础二分法类似 就是要在找到target的时候继续向左或者向右移动 package algor tra