代码随想录算法【Day1】

news2025/3/12 13:32:03

Day1

1.掌握二分法边界值判断,是根据写法来的;

2.删除数组元素的双指针和暴力解法;

3.灵活使用双指针方法

704 二分法

以前对于边界的问题非常纠结,到底是<还是<=,以及是mid还是mid-1。

通过视频讲解,得知二分法的两种常见写法:左闭右闭,左闭右开。

边界情况是根据以上两种写法来定的,对边界情况的判断本质上是使得区间是合理的。

两种写法的区别在于while里面是left <= right(左闭右闭)还是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(nums[mid] < target){
                left = mid + 1;
            }
            else if (nums[mid] > target){
                right = mid - 1;
            }
            else return mid;
        }
        return -1;
    }
};

左闭右开写法

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

主要改动了四个地方:

207 移除元素

使用双指针的方法对元素进行“删除”(“删除”本质上是覆盖,数组的元素不能被直接删除,当然这里vector也不是数组而是容易,但是我们是当做数组来实现的)

定义一个快指针和一个慢指针,快指针用于找到我们要的值,并赋给慢指针,慢指针相当于在一个新数组上。

双指针写法:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        //双指针 时间复杂度O(n)
        int slow = 0;
        for ( int fast = 0; fast < nums.size(); fast++){
            if(nums[fast] != val){
                nums[slow] = nums[fast];
                slow ++;
            }
        }
        return slow;
    }
};

暴力解:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        //暴力解
        int length = nums.size();
        for(int i = 0; i < length; i++){
            if(nums[i] == val){
                for(int j = i + 1; j < length; j++){
                    nums[j - 1] = nums[j];
                }
                i--;
                length--;
            }
        }
        return length;
    }
};
977.有序数组的平方

难点在于平方后还要保持有序,这该怎么实现?

依然可以用暴力法

但仔细观察发现,数组两端数据的绝对值最大,中间最小,所以我们可以用双指针

class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        int k = A.size() - 1;
        vector<int> result(A.size(), 0);
        for(int i = 0, j = A.size() - 1; i<=j;){
            if(A[i]*A[i] < A[j] * A[j]){
                result[k] = A[j] * A[j];
                k --;
                j --;
            }
            else{
                result[k] = A[i] * A[i];
                k --;
                i++;
            }
        }
        return result;
    }
};

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

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

相关文章

探索CSDN博客数据:使用Python爬虫技术

探索CSDN博客数据&#xff1a;使用Python爬虫技术 在数字化的浪潮中&#xff0c;数据的获取与分析变得日益关键。CSDN作为中国领先的IT社区和服务平台&#xff0c;汇聚了海量的技术博客与文章&#xff0c;成为一座蕴藏丰富的数据宝库。本文将引领您穿梭于Python的requests和py…

实战案例——ZooKeeper集群部署(新手教程超详细)

案例目标 了解ZooKeeper分布式应用程序协调服务使用3台机器搭建ZooKeeper集群使用ZooKeeper集群 案例分析 规划节点 ZooKeeper集群节点规划 Ip 主机名 节点 192.168.110.10 zookeeper1 集群节点 192.168.110.20 zookeeper2 集群节点 192.168.110.30 zookeeper3 …

如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈

如果你的网站是h5网站&#xff0c;如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈 h5如何转小程序 如果当年你们开发网站是用的h5但是没有开发小程序&#xff0c;也没有使用uniapp这样的混开框架&#xff0c;但是目前根据业务需…

阿里云redis内存优化——PCP数据清理

在阿里云安装了一个redis节点&#xff0c;今天使用时忽然想着点击了一下分析内存。好家伙&#xff0c;居然崩出了一个30多M的块出来。问题是我本地安装的redis没有这个啊&#xff0c;怎么奇怪冒出这个来了。 本着把系统用干榨尽的态度&#xff0c;研究了下这个问题的来源。网上…

学系C++:循环练习案例

一&#xff0c;猜数字 案例描述&#xff1a;系统随机生成一个1到100之间的数字&#xff0c;玩家进行猜测&#xff0c;如果猜错&#xff0c;提示玩家数字过大或过小&#xff0c;如果猜对恭喜玩家胜利&#xff0c;并且退出游戏。 #include <iostream> using namespace st…

六大基础深度神经网络之CNN

左侧是传统卷积网络输入的是一列像素点&#xff0c;右侧是卷积神经网络&#xff0c;输入的是具有长宽通道数的原始图像 下图为整体架构。卷积层可以认为提取特征&#xff0c;池化层是压缩特征。全连接层是把图像展平然后计算10个类别的概率值 给出一张图像不同区域的特征不同&a…

SemiDrive E3 MCAL 开发系列(6)– Icu 模块的使用

一、 概述 本文将会介绍 SemiDrive E3 MCAL Icu 模块的简介以及基本配置&#xff0c;其中还会涉及到 Xtrg 模块的配置。此外会结合实际操作的介绍&#xff0c;帮助新手快速了解并掌握这个模块的使用&#xff0c;文中的 MCAL 是基于 PTG3.0 的版本&#xff0c;开发板是官方的 …

嵌入式入门Day35

网络编程 Day2 套接字socket基于TCP通信的流程服务器端客户端TCP通信API 基于UDP通信的流程服务器端客户端 作业 套接字socket socket套接字本质是一个特殊的文件&#xff0c;在原始的Linux中&#xff0c;它和管道&#xff0c;消息队列&#xff0c;共享内存&#xff0c;信号等…

【Redis】:初识Redis

1.1 盛赞 Redis Redis 是⼀种基于键值对&#xff08;key-value&#xff09;的 NoSQL 数据库&#xff0c;与很多键值对数据库不同的是&#xff0c;Redis 中的值可以是由 string&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、list&#xff08;列表&#xf…

MATLAB 车牌自动识别系统设计 图像分割与图像增强方法 车牌识别

一 车牌自动识别系统总体设计 基于matlab的车牌识别系统&#xff0c;第一种方法采用图像分割与图像增强的方法&#xff0c;采集的车牌后将图像传入程序中&#xff0c;对图像进行处理后将车牌号提取出来&#xff0c;然后与数据库的样本进行对比后输出结果。 本课题拟采用的思路&…

Windows下C++使用SQLite

1、安装 进入SQLite Download Page页面&#xff0c;下载sqlite-dll-win-x86-*.zip、sqlite-amalgamation-*.zip、sqlite-tools-win-x64-*.zip三个包&#xff0c;这三个包里分别包含dll文件和def文件、头文件、exe工具。 使用vs命令行工具生成.lib文件&#xff1a;进入dll和def文…

module ‘django.db.models‘ has no attribute ‘FieldDoesNotExist‘

module ‘django.db.models’ has no attribute ‘FieldDoesNotExist’ xadmin报错 原因 django与xadmin版本不匹配。 django==3.2.7 xadmin-django==3.0.2解决方案 在xadmin/view/edit.py的388行改为 from django.core import exceptions if self.request_method ==

3.微服务灰度发布落地实践(组件灰度增强)

文章目录 前言调用链示图dubbo服务之间的的调链cloud 服务之间的调用链 网关servlet容器: 标签续传1.定义插件2.实现灰度增强拦截 线程池: 标签续传1.拦截Runnable或Callable,接口增强实现标签续传;Callable 插件定义Runnable 插件定义拦载Callabl或Runnable构造(可共用)拦载ru…

UE5 丧尸类杂兵的简单AI

A、思路 1、关卡初始化时&#xff0c;自动产生随机巡逻点&#xff0c;小兵到达后&#xff0c;去另一个随机巡逻点。 2、加入视力&#xff0c;发现主角后&#xff0c;不再巡逻&#xff0c;而开始追击主角并攻击。条件循环。 3、加入听力。主角的奔跑与射击会产生噪音&#xf…

数据库管理-第275期 Oracle 23ai:画了两张架构图(20241225)

数据库管理275期 2024-12-25 数据库管理-第275期 Oracle 23ai&#xff1a;画了两张架构图&#xff08;20241225&#xff09;1 系统管理分片2 用户定义分片总结 数据库管理-第275期 Oracle 23ai&#xff1a;画了两张架构图&#xff08;20241225&#xff09; 作者&#xff1a;胖…

【代码分析】Unet-Pytorch

1&#xff1a;unet_parts.py 主要包含&#xff1a; 【1】double conv&#xff0c;双层卷积 【2】down&#xff0c;下采样 【3】up&#xff0c;上采样 【4】out conv&#xff0c;输出卷积 """ Parts of the U-Net model """import torch im…

小程序基础 —— 08 文件和目录结构

文件和目录结构 一个完整的小程序项目由两部分组成&#xff1a;主体文件、页面文件&#xff1a; 主体文件&#xff1a;全局文件&#xff0c;能够作用于整个小程序&#xff0c;影响小程序的每个页面&#xff0c;主体文件必须放到项目的根目录下&#xff1b; 主体文件由三部分组…

Maven 测试和单元测试介绍

一、测试介绍 二、单元测试 1&#xff09;介绍 2&#xff09;快速入门 添加依赖 <dependencies><!-- junit依赖 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9…

大数据技术-Hadoop(一)Hadoop集群的安装与配置

目录 一、准备工作 1、安装jdk&#xff08;每个节点都执行&#xff09; 2、修改主机配置 &#xff08;每个节点都执行&#xff09; 3、配置ssh无密登录 &#xff08;每个节点都执行&#xff09; 二、安装Hadoop&#xff08;每个节点都执行&#xff09; 三、集群启动配置&a…

android sqlite 数据库简单封装示例(java)

sqlite 数据库简单封装示例&#xff0c;使用记事本数据库表进行示例。 首先继承SQLiteOpenHelper 使用sql语句进行创建一张表。 public class noteDBHelper extends SQLiteOpenHelper {public noteDBHelper(Context context, String name, SQLiteDatabase.CursorFactory fact…