2024-04-03-代码随想录算法训练营第一天[LeetCode704二分查找、LeetCode27移除元素]

文章目录

  • 第一题
    • 解法一[左闭右开]
    • 解法二[左闭右闭]
    • 总结
  • 第二题
    • 解法一[暴力解法]
    • 解法二[双指针法]
    • 总结

第一题

LeetCode704二分查找

解法一[左闭右开]

class Solution {
public:int search(vector<int>& nums, int target) {int size = nums.size();int right = size;int left = 0;while (left < right){int middle = left + ((right - left) / 2);//防止溢出if (nums[mid] == target){return mid;}else if (nums[mid] > target){right = mid;  }else{left = mid + 1;}}return -1;}
};

解法二[左闭右闭]

class Solution {
public:int search(vector<int>& nums, int target) {int size = nums.size();int right = size - 1;int left = 0;while (left <= right){int mid = (right + left) / 2;if (nums[mid] == target){return mid;}else if (nums[mid] > target){right = mid - 1;  }else{left = mid + 1;}   }return -1;}
};

总用时:十五分钟

总结

前几天做过一次了,这是第二次刷这题,还算是比较顺利的写出来这两种方法,总体看来左闭右开与左闭右闭的区别在于是否能取到right下标的值。几个关键的区别的地方:

  • 初始right在左闭右开取数组长度,在左闭右闭时取数组最大下标。

  • 左闭右开在while时不需要等号,因为[a, b),当b = a + 1数组就已经遍历完成。

  • 左闭右开在判断nums[mid] < target时直接将right = mid即可,因为mid已经判断完毕,mid在这种方式是取不到的所以最新的右下标等于mid,而左闭右闭时right = mid - 1,此时这种方式可以取到,将right指向新的未判断的下标。

第二题

LeetCode27移除元素

解法一[暴力解法]

class Solution {
public:int removeElement(vector<int>& nums, int val) {// 暴力解法int n = nums.size();for (int i = 0; i < n; i++){if (nums[i] == val){for (int j = i + 1; j < n; j++){nums[j - 1] = nums[j];}i--;n--;}}return n;}
};

解法二[双指针法]

class Solution {
public:int removeElement(vector<int>& nums, int val) {int n = nums.size();int right = 0;int left = 0;for (int right = 0; right < n; right++){// 找第一个不等于的值放到数组前if (nums[right] != val){nums[left++] = nums[right];}}return left;}
};

用时:30分钟

总结

目前暴力解法可以通过,暴力解法不太熟悉,主要卡在没有更新数组长度,导致超时,这是因为加入末尾有需要删除的值,将会拷贝很多份,如果不实时更新数组长度,会陷入死循环导致超时。

双指针法:好像还没那么难,这次直接写出来通过了,主要在于右指针找第一个不为val的值放入数组前面,同时更新左指针。

待完成:35.搜索插入位置 和 34. 在排序数组中查找元素

删除的值,将会拷贝很多份,如果不实时更新数组长度,会陷入死循环导致超时。

双指针法:好像还没那么难,这次直接写出来通过了,主要在于右指针找第一个不为val的值放入数组前面,同时更新左指针。

待完成:35.搜索插入位置 和 34. 在排序数组中查找元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/793225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA基础03-scanner,输出,循环,if的使用以及eclipse的安装

目录 scanner的使用 if语句的使用 eclipse的使用 switch语句的使用 输出方法的使用 循环语句 scanner的使用 实现用户数据的交互&#xff0c;用户通过终端输入数据 注意&#xff1a;使用Scanner需要导包 在程序开头加上&#xff1a;import java.util.Scanner; //由于S…

openssl源文件下载地址、arm交叉编译arm32位

https://www.openssl.org/source 官网下载所需源码版本 arm交叉编译步骤参考下面链接&#xff1a; openssl交叉编译动态库文件&#xff0c;使用arm-linux-gcc交叉编译资源-CSDN文库

IDEA修改jdk版本

项目的版本 实际版本和想要版本要对应起来 模块版本jdk1 源jdk版本2 如果报错 无效的发行版本 看一下pom文件中的編譯版本

如何评估基于指令微调的视觉语言模型的各项能力-MMBench论文解读

1. 传统基准的固有局限 VQAv2:视觉问题回答数据集,主要用于评估视觉理解与推理能力。COCO Caption:图像描述生成数据集,用于评估模型对图像内容的理解与描述能力。GQA:结合常识的视觉问题回答数据集。OK-VQA:需要外部知识的视觉问题回答数据集。TextVQA:图像中包含文本的…

软考高级架构师:文件管理系统概念和例题

一、AI 讲解 文件管理系统是操作系统中用于管理文件的一部分&#xff0c;负责文件的存储、检索、共享和保护。文件管理的一个核心概念是文件系统的组织方式&#xff0c;其中树形目录结构是一种常见的组织方式。 树形目录结构 树形目录结构是一种将文件以层级方式组织的方法&…

typescript的javascript的区别

TS和JS的区别&#xff1a; 类型不同&#xff1a;JS是一种脚本语言&#xff0c;用于创建动态网页&#xff0c;弱类型&#xff0c;没有静态类型选项&#xff1b;TS是JS的超集&#xff0c;用于解决大型项目的代码复杂性&#xff0c;强类型&#xff0c;支持静态和动态类型&#xf…

公司——深圳办理公司流程

文章目录 操作步骤网站 问题解答1. 不同企业类型有什么区别&#xff1f;内资企业外资企业个体工商户区别 2. 内资企业中具体的分类有什么区别&#xff1f;公司个人独资企业合伙企业区别 建议直接找一些代理中介&#xff0c;初创公司2400左右即可完成公司注册红本地址挂靠1年的财…

武汉星起航电子商务公司领航跨境电商新纪元,助力品牌走向全球

在全球经济一体化的时代背景下&#xff0c;跨境电商正成为推动国际贸易增长的重要力量。武汉星起航电子商务有限公司&#xff0c;作为一家专注于提供一站式解决方案的跨境电商服务商&#xff0c;凭借其丰富的实战经验和专业团队&#xff0c;在行业中取得了令人瞩目的成绩。 自…

QT----YOLOv5检测平台

目录 1 opencv环境安装1.1 报错Could NOT find CUDNN (missing: CUDNN_LIBRARY CUDNN_INCLUDE_DIR) (Required is at least version "7.5")1.2 使用camkevs编译opencv4.8.01.3 报错operator !":重载函数具有类似的转换(编译源文件 H:\opencv-4.8.0\opencv-4.8.0…

【算法】删除数组中的重复元素 - 双指针

题目 给定一个有序数组&#xff0c;要求删除数组中的重复元素&#xff0c;不允许创建新数组&#xff0c;返回删除重复元素后的数组长度。 原理 定义一个快指针 j 和一个慢指针 i&#xff0c;慢指针从下标0开始&#xff0c;快指针从下标1开始&#xff0c;遍历数组。如果两个下…

Python环境搭建—安装Python3解释器

&#x1f947;作者简介&#xff1a;CSDN内容合伙人、新星计划第三季Python赛道Top1 &#x1f525;本文已收录于Python系列专栏&#xff1a; 零基础学Python &#x1f4ac;订阅专栏后可私信博主进入Python学习交流群&#xff0c;进群可领取Python视频教程以及Python相关电子书合…

43.1k star, 免费开源的 markdown 编辑器 MarkText

43.1k star, 免费开源的 markdown 编辑器 MarkText 分类 开源分享 项目名: MarkText -- 简单而优雅的开源 Markdown 编辑器 Github 开源地址&#xff1a; https://github.com/marktext/marktext 官网地址&#xff1a; MarkText 支持平台&#xff1a; Linux, macOS 以及 Win…

设计模式(19):策略模式

策略模式 策略模式对应与解决某一个问题的一个算法族&#xff0c;允许用户从该算法族中任选一个算法解决某一问题&#xff0c;同时可以方便的更换算法或者增加新的算法。并且由客户端决定调用哪个算法。 本质 分离算法&#xff0c;选择实现&#xff1b; 策略模式角色 上下…

单例模式以及线程安全问题

单例模式的概念 单例模式是指的是整个系统生命周期内&#xff0c;保证一个类只能产生一个实例对象 保证类的唯一性 。 通过一些编码上的技巧&#xff0c;使编译器可以自动发现咱们的代码中是否有多个实例&#xff0c;并且在尝试创建多个实例的时候&#xff0c;直接编译出错。 …

力扣刷题 二叉树的迭代遍历

题干 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输…

Linux集群(二)集群搭建与keeplived配置

目录 一、集群搭建 1.复制3份Tomcat 2.测试Tomcat 3. 配置nginx.conf配置文件 二、keeplived 1.什么是keeplived 2.keeplived特点 3.下载和安装 3.1下载 3.2安装 3.3配置keeplived.conf配置文件 3.4测试 一、集群搭建 集群的主要目的是解决并发的问题。 1.复制3…

用户增长方法论(未完)

用户增长知识框架 1、确定用户增长的北极星指标 2、认清适合的用户增长驱动模式 3、确认用户增长的核心杠杆策略 4、寻找用户增长的魔法数字 5、基于魔法数字设计增长策略 6、通过AB实验验证增长策略 什么是用户增长&#xff1f; 用户增长的精髓是一套体系和方法&#xff0c;…

Windows程序设计课程作业-1

文章目录 1. 作业内容2. 设计思路分析与难点3. 代码实现3.1 接口定义3.2 工厂类实现3.3 委托和事件3.4 主函数3.5 代码运行结果 4. 代码地址5. 总结&改进思路6. 阅读参考 1. 作业内容 使用 C# 编码&#xff08;涉及类、接口、委托等关键知识点&#xff09;&#xff0c;实现…

信创环境ES索引管理脚本:close, delete

背景 elastic-curator在信创环境无现成安装包&#xff0c;且现成一般无法联网&#xff0c;此时通过脚本管理es索引是最佳选择。 1, 脚本内容: es-close-del.sh [rootmyprojtest001 ]# cat es-close-del.sh #/bin/bash#elastic地址 ELASTIC_URL127.0.0.1:9200 #默认的删除时间…