代码随想录(day1)

1. 二分查找:

704. 二分查找 - 力扣(LeetCode)


对于二分查找的思想较为简单,具体如下:

      假设寻找的值为target,分别定义两个变量left,right,其中left=0right = nums.size()-1

     再定义一个变量mid=(left+right)/2,如果target > nums[mid],表示需要查找的元素在数组的右半部分,此时需要更新left,使得left=mid+1。如果target <nums[mid],表示需要查找的数在数组的左半部分,此时需要更新right,使得right = mid-1

    如果遇到target == nums[mid]的情况,说明在给定数组中成功的找到了target,此时返回mid即可。

   对于二分查找的结束判定条件,为left <= right。因此可以得出代码为:
 

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

    

2.移除元素:

27. 移除元素 - 力扣(LeetCode)

       对于此题,文章提供两种解决方法,分别是暴力求解以及双指针法:
       题目中要求,需要在不开辟额外空间的情况下,额外修改数组,删除数组中数值等于val的元素。由于数组是一块连续空间,因此,在删除数组中的元素时,并不能直接进行删除,例如删除下列给出数组中值为3的元素:

        

对于数组中的删除,其实是对于元素的覆盖,例如,删除上面数值为3的元素,即:

对于上述过程 ,可以分为下面的情况:

        首先建立for循环,定义变量i,变量i用于检测数组中i位置的元素是否等于val,如果i位置的元素的值等于val,则进入第二层for循环,在第二层循环中,定义变量j=i+1,即:

      随后,令j位置及其之后的元素整体向前移动一位:

       对于上述过程,看作一次移除元素,由于移除了一次元素,因此需要将数组的长度size--

       对于上面给出的例子,体现了一个特殊情况,即:两个值为val的元素在数组中连续排列。但是由于上述移除元素的过程,将这些元素整体向前移动了一位,因此,为了针对这种特殊情况,需要将i向前移动一位。对应代码如下:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {

int size = nums.size();
        for(int i = 0; i < size; i++)
        {
            if(nums[i] == val)
            {
                for(int j = i+1; j < size; j++)
                {
                    nums[j-1] = nums[j];
                }
                size--; 
                i--;
            }
        }
        return size;

    }
};

       在给出了暴力解法的代码后,此处引入第二种解法,即:双指针法。具体方法如下:

       分别创建两个指针slow,fast,对于两个指针,最开始都指向数组最开头的元素。

随后,首先让fast遍历数组,如果fast位置所对应的元素不等于val,则对slow位置的元素进行一次复写,在复写完成后,让slow指向下一个位置。如果fast位置所对应的元素等于val,则继续让fast指向下一个位置。直到遇到的元素不等于val。为了更方便的理解上述过程,下面给出一个例子来进行演示:

       在最开始,slow,fast均指向元素0,由于元素0不是val,因此,fastslow的元素进行原地复写,即:

此时,fast位置所对应的元素等于val,因此,slow继续向后遍历

   此时,fast位置所遇到的元素不等于val,即:

因此,对slow的位置进行复写,然后再让slow指向下一个位置,即:

对于后续操作,均按照上述步骤执行。

对于上述操作,下面给出相应的代码,即:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {

int size = nums.size();
        for(int i = 0; i < size; i++)
        {
            if(nums[i] == val)
            {
                for(int j = i+1; j < size; j++)
                {
                    nums[j-1] = nums[j];
                }
                size--; 
                i--;
            }
        }
        return size;

    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

灵魂指针,教给(一)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 一、内存和地址 1.1 内存 在介绍知识之前&#xff0c;先来想一个生活中的小栗子&#xff1a; 假如把你放在一个有100间屋子的酒店…

flutter_gen依赖

flutter_gen 5.4.0 flutter项目内终端&#xff1a; dart pub global activate flutter_gen export PATH“ P A T H " : " PATH":" PATH":"HOME/.pub-cache/bin” fluttergen

为 OpenBMC 添加一个新的系统

1. 前言 在上一篇文章中向大家介绍了 OpenBMC 的是什么以及它的作用和应用场景&#xff0c;并且以一个自带的示例平台 romulus 展示了从下载源码包开始到启动系统并访问 Web 控制页面的整体构建流程。 通过前文已经了解到如何为已有的平台构建系统镜像&#xff0c;下面我们来…

AcWing 1027. 方格取数

解题思路 相关代码 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int nums[][] = new int[n+1][n+1];while(true){int a = scanner.nextInt();int b = scanner.…

1.初识python

1.初识python 编程语言是用来定义计算机程序的语言&#xff0c;用来向计算机发出指令。 1.python语言是一种面向对象的解释型高级编程语言。 解释型语言&#xff1a;使用专门的解释器对源码程序逐行解释成特定平台的机器并立即执行&#xff0c;是代码在执行时才被解释器一行行…

数据库(mysql)-新手笔记-基本知识点(1)

基本概念 数据库 Database :存储数据的容器 表 Table : 在数据库中存储的基本结构,它由行和列组成 行 Row : 表中的一条记录 列 Column : 表中的字段,定义了数据的类型和约束 数据类型 数据值 如 INT(整型),FLAOT(浮点型) ,DECIMAL (精确小数点) 字符串 如 VARCHAR(可变长度字…

Redis报错NOAUTH Authentication required怎么解决?

问题描述 在使用redis-cli时&#xff0c;可能会遇到报错 (error) NOAUTH Authentication required. 问题分析 这是因为在redis的配置文件 redis.windows-service.conf 中设置了密码&#xff0c;导致了这个问题 问题解决 1. 在redis.windows-service.conf文件查看密码 2. 输…

苹果曝出两个 iOS 系统 0-Day 漏洞

最近&#xff0c;苹果公司发布了紧急安全更新&#xff0c;解决了两个 iOS 零日漏洞。这些漏洞存在于 iOS 内核&#xff08;CVE-2024-23225&#xff09;和 RTKit&#xff08;CVE-2024-23296&#xff09;中&#xff0c;威胁攻击者可利用其绕过内核内存保护&#xff0c;这就给了具…

[R] ggplot2 - exercise (“fill =“)

We have made the plots like: Lets practice with what we have learnt in: [R] How to communicate with your data? - ggplot2-CSDN博客https://blog.csdn.net/m0_74331272/article/details/136513694 #tutorial 5 -script #Exercise 1 #1.1# ggplot(smoking_and_drug_use_…

20 easy 70. 爬楼梯

//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 // // 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; // // // // 示例 1&#xff1a; // // //输入&#xff1a;n 2 //输出&#xff1a;2 //解释&#xff1a;有两种方法可以爬到楼顶。 /…

electron 架构

文章目录 Chromium 架构Electron 架构 Chromium 架构 主体架构&#xff1a;主进程 Browser&#xff0c;打开一个页面就会启动一个 Render 渲染进程&#xff0c;进程间通信就是 IPC 机制&#xff08;Inter-Process Communication&#xff09;。 主进程的 RenderProcessHost 和 R…

算法 - 【受限条件下可到达节点的数目】

受限条件下可到达节点的数目 题目示例1示例2 分析代码 题目 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和…

【通信原理笔记】【一】确定信号分析——1.4 信号的功率谱与能量谱

文章目录 前言一、功率谱与能量谱1. 从频域求能量说起2. 再聊聊密度3. 单边能量谱与带宽3.1 实信号的共轭对称性3.2 单边谱与带宽 二、信号的相关函数1. 说回到时域分析 总结 前言 上一篇我们学习了信号的功率与能量&#xff0c;现在我们继续深入&#xff0c;探讨一下信号的功…

Pytorch学习 day04(Totensor、Normalize、Resize、Compose)

Totensor 把一个PIL格式的图片&#xff0c;或者ndarray格式的图片转换为tensor格式使用方法&#xff0c;如下&#xff1a; from PIL import Image from torchvision import transforms from torch.utils.tensorboard import SummaryWriterimg Image.open("images/00130…

Redis 面试题

Redis 基础 什么是 Redis&#xff1f; Redis (Remote Dictionary Server) 本质上是一个 Key-Value 类型的内存数据库&#xff0c;很像 memcached&#xff0c;整个数据库统统加载在内存当中进行操作&#xff0c;定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯…

【二】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题

教学管理系统201703153 教学管理系统数据库展示 成绩表展示 课程表展示 学生表展示 院系表展示 一、基本操作 设置复合主键 设置其他表的主键 设置字段取值范围 二、简单操作 第一题 第二题 第三题 第四题 结尾 最后&#xff0c;感谢您阅读我的文章&#xff0c;希望这些内容能…

RF接口测试(1)

RF是做接口测试的一个非常方便的工具&#xff0c;我们只需要写好发送报文的脚本&#xff0c;就可以灵活的对接口进行测试。 做接口测试我们需要做如下工作&#xff1a; 1、拼接发送的报文 2、发送请求的方法 3、对结果进行判断 我们先按步骤实现&#xff0c;再进行RF操作的…

降低85%的gc发生率:ES的GC调优实践!

#大数据/ES #经验 #性能 问题背景 客户方面反馈的问题是ES入库速度变慢&#xff0c;延迟升高到几百毫秒&#xff0c;导致数据积压过多&#xff0c;影响了业务。 排查发现ES的服务日志出现不少的gc overhead现象&#xff0c;下面是一个示例的日志片段&#xff1a; [yyyy-MM-…

C++单例模式、工厂模式

一、单例模式 (一) 什么是单例模式 1. 是什么&#xff1f; 在系统的整个生命周期内&#xff0c;一个类只允许存在一个实例。 2. 为什么&#xff1f; 两个原因&#xff1a; 节省资源。方便控制&#xff0c;在操作公共资源的场景时&#xff0c;避免了多个对象引起的复杂操作…

腾讯云4核8G服务器轻量和CVM可用来干什么?

腾讯云4核8G服务器适合做什么&#xff1f;搭建网站博客、企业官网、小程序、小游戏后端服务器、电商应用、云盘和图床等均可以&#xff0c;腾讯云4核8G服务器可以选择轻量应用服务器4核8G12M或云服务器CVM&#xff0c;轻量服务器和标准型CVM服务器性能是差不多的&#xff0c;轻…