智能小车速通版——手把手教程

考虑到大部分学校,会发放简易小车来作为智能车初期培训和筛选的工具,

于是,我写一个简单的教程,能够实现简单小车的电磁循迹。

通过这个教程,能够通过简化的步骤搭建寻迹小车,进而了解整个智能车是如何实现的,快速上手,为后续参与智能车竞赛做准备。

这里我不会讲解原理,直接手把手带着使用,需要看原理的时候就看我相关博客。

目录

一、准备

C语言

单片机

二、器件

三、安装编程环境软件KEIL

1.安装KEIL

 2.激活License

 3.安装pack包

四、下载逐飞开源库

五、测试器件

电机转

屏幕

ADC

六、装车

七、循迹

电机

循迹


一、准备

C语言

智能车入门——编程语言(c)的学习

 智能车入门补充篇——模块化编程

首先要有一定的C语言基础。

想要学嵌入式,C语言必须学会!

这里一定不要为了进度图快,打好基础很重要。当时带我们的学长,给了我们一周的时间让我们复习C语言。

推荐平台:

菜鸟教程 - 学的不仅是技术,更是梦想!

 郝斌C语言

下面必须要掌握:

初学阶段要学会掌握基本的概念、函数、数组、语法关键词if,for,while的使用即可,指针与结构体部分可以在后期再进行补充学习。

这虽然就两行字,但是一定要扎实,好好打好基础,数据类型、运算符号都要会,别到时候用除法打了个"\"还不知道哪里错了。uint=unsigned int这种小知识别漏了。

单片机

需要简单了解一下什么是单片机,起码知道什么是IO口。

智能车入门——I/O、PWM

推荐学习平台:

51单片机普中科技视频完整版0基础入门学习_哔哩哔哩_bilibili

51单片机入门教程-2020版 程序全程纯手打 从零开始入门_哔哩哔哩_bilibili

 最低的要求是跟着教程,能够点亮LED灯。

二、器件

一个舵机将近100块,一个摄像头得两三百,大部分学校选拔应该会选用这种廉价的小车,靠电机实现前进和转向。

那么我就拿这种最简单的小车举例,介绍循迹最起码有的器件:

单片机(一般是STC)

电源(电池),

电机驱动(一般练手用的是L298N),

电机(小马达)、轱辘,

还有传感器,光电循迹用光电传感器,电磁循迹用电容电感对+运放

如果硬件给力点,还会有主板将前面的接口合并到一个板子上

为了方便看参数,还会有屏幕。

三、安装编程环境软件KEIL

Keil C51是美国Keil软件公司(现已被ARM公司收购)出品的支持8051系列单片机架构的一款 IDE

 【精选】智能车入门——IDE安装以及库函数选用

STC8系列 MDK FOR C51 IDE软件
链接:https://pan.baidu.com/s/10eqOQOFn7JapLJ_1Wc_DTQ   提取码:aom2

STC16专用 MDK FOR C251 IDE软件:链接:https://pan.baidu.com/s/1euVGEsRCV_novTHqnhQD7Q   提取码:krw6

 需要这三个文件,MDK532是keil的安装文件,keygen是破解软件,C51V960a是C51的pack包

1.安装KEIL

首先点击运行mdk532.exe文件

然后一路Next

路径自己选,name随便填

 2.激活License

(1)右击图标,用管理员身份运行!

(2)把ID复制下来

(3)把电脑静音

(4)右击keygen_new2032,用管理员身份运行

 把ID粘贴进去,

Target这里,STC8选C51,STC32选C251

不知道自己手里的该装哪个,你就百度或者问卖板子的客服

下面的选prof....PLUS

点击Generate,生成激活码

 (5)打开KEIL复制生成的激活码,粘贴在New License ID Code处,点击Add LIC,即可成功激活mdk,显示mdk的使用期限2032年

 3.安装pack包

双击c51v960a.exe,一路next。

这里pack包需要与自己的单片机相匹配,没有pack包的话,向卖板子的客服要就行了。

四、下载逐飞开源库

 智能车入门——库函数选用

找到自己的型号下载 

SeekFree (seekfree) - Gitee.com

 复制Seekfree_XXXXXXX_Opensource_Library文件夹,在此基础上增添代码,最后放到中文路径。

Seekfree_STC8A8K64S4_Opensource_Library\Project\MDK

双击该路径下的SEEKFREE.uvproj文件,即可打开工程

五、测试器件

首先写代码,看自己能不能调用那些器件。

【逐飞科技】STC8G2K 核心板与智能车常用模块搭配使用视频教程_哔哩哔哩_bilibili

【精选】智能车入门——简单驱动常用模块

电机转

电机驱动有两种

一种是两路PWM,另一种是一路PWM,一路 GPIO。

两路PWM,就是根据两个pwm信号 差值的正负决定电机转动方向,差值大小决定电机转速,

 一路PWM,一路 GPIO,就是pwm控制转速,GPIO控制方向。

想知道你手上的驱动属于哪一种,你就淘宝扫一扫识图,看哪家店卖的一模一样,然后看商品介绍。

以一路PWM,一路 GPIO举例:


#include "headfile.h"

uint16 duty = 7000;


void main()
{
	DisableGlobalIRQ();	//¹Ø±Õ×ÜÖжÏ
	board_init();	
	
	pwm_init(PWM5_P25, 10000, 9500);   
	EnableGlobalIRQ();	//¿ªÆô×ÜÖжÏ
    while(1)
	{
		pwm_duty(PWM5_P25,duty);
   gpio_pull_set(P2_6, 0);
	}
}

这就实现了让一个电机固定转速转。

接下来测试整个驱动好不好使


#include "My.h"

void pwm_duty_init()
{

	pwm_init(PWM3_P63,17000,0);
	pwm_init(PWM4_P64,17000,0);

	
}
/****************************************************************
电机驱动测试
12假设2路pwm的正反转
34假设64口控制方向的正反转(1个PWM,1控制方向)
56假设63口控制方向的正反转(1个PWM,1控制方向)
****************************************************************/
void mitor_duty(char mode)
{
if(mode==1)
{
	pwm_duty(PWM3_P63,0);
	pwm_duty(PWM4_P64,800);
}
if(mode==2)
{
	pwm_duty(PWM3_P63,800);
	pwm_duty(PWM4_P64,0);
}
if(mode==3)
{
	pwm_duty(PWM3_P63,800);
	pwm_duty(PWM4_P64,0);
}
if(mode==4)
{
	pwm_duty(PWM3_P63,800);
	pwm_duty(PWM4_P64,1000);
}
if(mode==5)
{
	pwm_duty(PWM3_P63,0);
	pwm_duty(PWM4_P64,800);
}
if(mode==6)
{
	pwm_duty(PWM3_P63,1000);
	pwm_duty(PWM4_P64,800);
}

}


#ifndef __MY_H_
#define __MY_H_
#include "headfile.h"

void pwm_duty_init();

void mitor_duty(char mode);


#endif

屏幕

下面是常见三款屏幕,同样的,不知道什么型号就淘宝搜,不会接线就问客服。

我以1.8TFT举例:

首先去淘宝搜到这个型号屏幕,在商品详情页可以看到引脚名称

在 seekfree_peripheral文件夹下找到屏幕对应的文件

 首先打开18TFT.h文件找到接线定义:
 

                    接线定义:
                    ------------------------------------ 
                        模块管脚            单片机管脚
                        SCL                 查看TFT_SCL_PIN        宏定义的引脚     硬件SPI引脚不可随意切换
                        SDA                 查看TFT_SDA_PIN        宏定义的引脚     硬件SPI引脚不可随意切换
                        RES                 查看REST_PIN        宏定义的引脚    
                        DC                  查看DC_PIN_PIN        宏定义的引脚  
                        CS                  查看TFT_CS_PIN        宏定义的引脚      
                        
                        电源引脚
                        BL  3.3V电源(背光控制引脚,也可以接PWM来控制亮度)
                        VCC 3.3V电源
                        GND 电源地
                        最大分辨率128*160
                    ------------------------------------ 

//--------------------软件SPI--------------------

#define    TFT_SCL_SIMSPI_PIN         P25                //定义SPI_SCK引脚
#define    TFT_SDA_SIMSPI_PIN        P23               //定义SPI_MOSI引脚
#define TFT_REST_SIMSPI_PIN      P20                //定义复位引脚
#define TFT_DC_SIMSPI_PIN          P21                //液晶命令位引脚定义
#define TFT_CS_SIMSPI_PIN          P22                //定义SPI_CS引脚
#define TFT_BL_SIMSPI_PIN          P24                //液晶背光引脚定义  

//--------------------硬件SPI--------------------

#define TFT_SPIN SPI_2                     //定义使用的SPI号
#define    TFT_SCL_PIN     SPI2_SCLK_P25    //定义SPI_SCK引脚
#define    TFT_SDA_PIN        SPI2_MOSI_P23   //定义SPI_MOSI引脚
#define    TFT_SDA_IN_PIN    SPI2_MISO_P24   //定义SPI_MISO引脚  TFT屏幕没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用

#define TFT_REST_PIN      P20
#define TFT_DC_PIN          P21
#define TFT_CS_PIN          P22            //定义SPI_CS引脚
#define TFT_BL_PIN          P24

 根据接线定义去接线,硬件SPI、软件SPI根据喜好去选就行了。

函数有这些:

//--------------------Ó²¼þSPI--------------------
void lcd_init(void);
void lcd_clear(int color);
void lcd_drawpoint(uint16 x,uint16 y,uint16 color);
void lcd_showchar(uint16 x,uint16 y,uint8 dat);
void lcd_showstr(uint16 x,uint16 y,uint8 dat[]);
void lcd_showint8(uint16 x,uint16 y,int8 dat);
void lcd_showuint8(uint16 x,uint16 y,uint8 dat);
void lcd_showint16(uint16 x,uint16 y,int16 dat);
void lcd_showuint16(uint16 x,uint16 y,uint16 dat);
void lcd_showint32(uint16 x,uint16 y,int32 dat,uint8 num);
void lcd_showfloat(uint16 x,uint16 y,double dat,uint8 num,uint8 pointnum);
void showimage(const unsigned char *p);

然后初始化、调用代码就行了

/*********************************************************************************************************************
 * COPYRIGHT NOTICE
 * Copyright (c) 2020,逐飞科技
 * All rights reserved.
 * 技术讨论QQ群:一群:179029047(已满)  二群:244861897(已满)  三群:824575535
 *
 * 以下所有内容版权均属逐飞科技所有,未经允许不得用于商业用途,
 * 欢迎各位使用并传播本程序,修改内容时必须保留逐飞科技的版权声明。
 *
 * @file       		main
 * @company	   		成都逐飞科技有限公司
 * @author     		逐飞科技(QQ790875685)
 * @version    		查看doc内version文件 版本说明
 * @Software 		MDK FOR C51 V9.60
 * @Target core		STC8A8K64S4
 * @Taobao   		https://seekfree.taobao.com/
 * @date       		2020-5-13
 ********************************************************************************************************************/

#include "headfile.h"

board.h文件中FOSC的值设置为0,则程序自动识别系统频率

///*board.h文件中FOSC的值设置不为0,则系统频率为FOSC的值,
//在使用stc-isp工具下载程序的时候需要将IRC频率设置为FOSC的值*/


void main()
{
	DisableGlobalIRQ();		//关闭总中断
	board_init();			//初始化内部寄存器,勿删除此句代码。
		lcd_init();
	//此处编写用户代码(例如:外设初始化代码等)

	EnableGlobalIRQ();		//开启总中断



    while(1)
	{
		//此处编写需要循环执行的代码
//    lcd_showstr(0,0,"lucky");
//		pca_delay_ms(1000);
		lcd_showchar(0,0,'x');//坐标0,0写一个字符x
    }
}

ADC

同样的运放,哪里弄得,从哪里获取资料

最简单的循迹只需要2个电感电容对,按照下面的接线就行

 将采集到的电感值显示到屏幕上

/*********************************************************************************************************************
 * COPYRIGHT NOTICE
 * Copyright (c) 2020,逐飞科技
 * All rights reserved.
 * 技术讨论QQ群:一群:179029047(已满)  二群:244861897(已满)  三群:824575535
 *
 * 以下所有内容版权均属逐飞科技所有,未经允许不得用于商业用途,
 * 欢迎各位使用并传播本程序,修改内容时必须保留逐飞科技的版权声明。
 *
 * @file       		main
 * @company	   		成都逐飞科技有限公司
 * @author     		逐飞科技(QQ790875685)
 * @version    		查看doc内version文件 版本说明
 * @Software 		MDK FOR C51 V9.60
 * @Target core		STC8A8K64S4
 * @Taobao   		https://seekfree.taobao.com/
 * @date       		2020-5-13
 ********************************************************************************************************************/

#include "headfile.h"

board.h文件中FOSC的值设置为0,则程序自动识别系统频率

///*board.h文件中FOSC的值设置不为0,则系统频率为FOSC的值,
//在使用stc-isp工具下载程序的时候需要将IRC频率设置为FOSC的值*/


void main()
{
	DisableGlobalIRQ();		//关闭总中断
	board_init();			//初始化内部寄存器,勿删除此句代码。
		lcd_init();
   adc_init(ADC_P01,ADC_SYSclk_DIV_2);            //
	 adc_init(ADC_P02,ADC_SYSclk_DIV_2);            //

	//此处编写用户代码(例如:外设初始化代码等)

	EnableGlobalIRQ();		//开启总中断



    while(1)
	{
		//此处编写需要循环执行的代码
   lcd_showuint16(2,2,adc_once(ADC_P01, ADC_10BIT)  );
	 lcd_showuint16(3,3,adc_once(ADC_P02, ADC_10BIT)  );

    }
}

六、装车

七、循迹

智能车入门——跑车前的零碎知识

 智能车入门补充篇——电感值处理、转向控制与巡线

 智能车入门——电磁循迹原理与实现

电机

#include "dianji.h"


// 电机初始化
void dianji_init()   
{

  pwm_init(PWM3_P63,17000,0);       //IN1  右
	pwm_init(PWM4_P64,17000,0);				//IN2  右  +前
	pwm_init(PWM5_P65,17000,0);       //IN3  左  +前
	pwm_init(PWM6_P66,17000,0);       //IN4  左
}


 //驱动电机
void dianji_Control(int32 LDuty, int32 RDuty)   
{	
	
  if(LDuty > 0)                  //左正
	{
		 pwm_duty(PWM5_P65, LDuty);
		 pwm_duty(PWM6_P66, 0);
	}
	if(LDuty < 0)                  //左反
	{
		
		 pwm_duty(PWM5_P65, 0);
		 pwm_duty(PWM6_P66, LDuty);
	}

	if(RDuty > 0)                  //右正
	{
		 pwm_duty(PWM3_P63, 0);
		 pwm_duty(PWM4_P64, RDuty);
	}
	if(RDuty < 0)                  //右反
	{
		 pwm_duty(PWM3_P63, RDuty);
		 pwm_duty(PWM4_P64, 0);
	}
	if(LDuty == 0)
	{
		 pwm_duty(PWM3_P63, 0);
		 pwm_duty(PWM4_P64, 0);
	}
	if(RDuty == 0)
	{
		 pwm_duty(PWM5_P65, 0);
		 pwm_duty(PWM6_P66, 0);
	}

	
}







//限幅保护
int32 range_protect(int32 duty, int32 min, int32 max)
{
	if (duty >= max)
	{
		return max;
	}
	if (duty <= min)
	{
		return min;
	}
	else
	{
		return duty;
	}
}
#ifndef __dianji_H__
#define __dianji_H__
#include "headfile.h" 

int32 range_protect(int32 duty, int32 min, int32 max);//限幅保护
void dianji_init();
void dianji_Control(int32 LDuty, int32 RDuty);


	
#endif

循迹

我找的小车,循迹只能靠电机的差速,由于这种小车速度很慢,因此,只需要偏差乘一个比例系数就能简单循迹,相当于PID中只给P系数,I、D的值为0.

首先初始化各个器件

void all_init()   
{

   adc_init(ADC_P01,ADC_SYSclk_DIV_2);            //³õʼ»¯P1.0ΪADC¹¦ÄÜ,ADCʱÖÓƵÂÊ£ºSYSclk/2
	 adc_init(ADC_P02,ADC_SYSclk_DIV_2);            //³õʼ»¯P1.0ΪADC¹¦ÄÜ,ADCʱÖÓƵÂÊ£ºSYSclk/2
	 dianji_init();                                 //µç»ú³õʼ»¯
	 lcd_init();                                 //ÆÁÄ»³õʼ»¯
	 pd_init();
}

获取ADC

void adc_collect()
{
adc1=adc_once(ADC_P01, ADC_10BIT);
adc4=adc_once(ADC_P02, ADC_10BIT);	
}	

 差速循迹

float kp=1.2;
now_error = adc1-adc4;
output=kp*now_error

LeftDuty =600-output;
RightDuty=600+output;

LeftDuty =	range_protect( LeftDuty,-200, 1000);
RightDuty=	range_protect(RightDuty,-200, 1000);
dianji_Control(LeftDuty,RightDuty);


我会贴上完整代码,用来参考。

举一反三,如果要用到按键、舵机、陀螺仪等也是同样的步骤。

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

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

相关文章

Linux网络——传输层

目录 一.再谈端口概念 二.UDP协议 1.UDP协议格式 2.UDP的特点 3.面向数据报 4.UDP的缓冲区 5.UDP使用注意事项 6.UDP协议在内核中的表现形式 7.基于UDP的应用层协议 三.TCP协议 1.TCP协议格式 2.TCP确认应答机制 3.超时重传机制 4.TCP报文六位标志位 5.滑动窗口 6…

SpringBoot整合knife4j生成Api文档

一、介绍 先看效果 ①&#xff1a;Swagger 介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是&#xff1a; 使得前后端分离开发更加方便&#xff0c;有利于团队协作 接口的文档…

Axios简单使用与配置安装-Vue

安装Axios npm i axios main.js 导入 import Axios from axios Vue.prototype.$axios Axios简单发送请求 get getTest() {this.$axios({method: GET,url: https://apis.jxcxin.cn/api/title?urlhttps://apis.jxcxin.cn/}).then(res > {//请求成功回调console.log(res)}…

从0开始学习JavaScript--JavaScript生成器

JavaScript生成器&#xff08;Generator&#xff09;是一项强大的语言特性&#xff0c;它允许函数在执行过程中被暂停和恢复&#xff0c;从而实现更灵活的控制流。本文将深入探讨JavaScript生成器的基本概念、用法&#xff0c;并通过丰富的示例代码展示其在实际应用中的优势和强…

Web应用系统的小安全漏洞及相应的攻击方式

1 写作目的 本文讲述一个简单的利用WebAPI来进行一次基本没有破坏力的“黑客”行为。 主要目的如下&#xff1a; 了解什么叫安全漏洞知道什么是api了解一些获取api的工具通过对API的认识了解白盒接口测试基本概念和技术 免责声明&#xff1a; 本文主要是以学习交流为目的…

基于SSM+Vue的社区共享食堂管理系统

基于SSM的社区共享食堂管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 菜品详情 管理员界面 摘要 社区共享食堂管理系统是一种基于SSM&#xf…

opencv-直方图

直方图是一种对图像亮度分布的统计表示&#xff0c;它显示了图像中每个灰度级别的像素数量。在OpenCV中&#xff0c;你可以使用cv2.calcHist() 函数计算直方图。 以下是一个简单的示例&#xff0c;演示如何计算和绘制图像的直方图&#xff1a; import cv2 import numpy as np …

Raspberry Pi 5 新一代单板计算机:树莓派5代 (介绍、入门、解疑)

树莓派5代正式发布后&#xff0c;硬件和性能的全面升级让众多开发者们都想入手感受一波&#xff0c;外观上Raspberry Pi 5 与前代产品非常相似&#xff0c;不过&#xff0c;在保留信用卡大小的整体尺寸的同时&#xff0c;也更新了一些设计元素&#xff0c;以适应新芯片组的功能…

色彩(2)调试喜好——适用于camera tuning

#灵感# 色彩是一种易感知的图像属性。 目录 1、消费级的camera 产品&#xff0c;最关注的是“肤色”。 2、受欢迎的颜色风格&#xff1a; 3、颜色误差 4、颜色调整方法 5、影响颜色的模块 1、消费级的camera 产品&#xff0c;最关注的是“肤色”。 家用监控产品输出的图…

matlab 最小二乘拟合平面并与XOY平面对齐

目录 一、算法原理二、代码实现1、绕原点对齐2、绕质心对齐三、结果展示1、绕原点对齐2、绕质心对齐四、测试数据本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 首先,使用最小二乘拟合平面…

Mac | Vmware Fusion | 分辨率自动还原问题解决

1. 问题 Mac的Vmware Fusion在使用Windows10虚拟机时&#xff0c;默认显示器配置如下&#xff1a; 开机进入系统并变更默认分辨率后&#xff0c;只要被 ⌘Tab 切换分辨率就会还原到默认&#xff0c;非常影响体验。 2. 解决方式 调整 设置 -> 显示器 -> 虚拟机分辨率…

OV9281 调试记录

一、基本概念 HTS width_number_of_effective_cloumnsH_Blank&#xff0c;图像宽度行消隐 VTS height_number_of_effective_rows V_Blank&#xff0c;图像高度场消隐 OV9281 sensor array layout如下&#xff1a; 二、帧率配置 1、clock diagram 2、PLL configuration …

【每日OJ —— 20.有效的括号(栈)】

每日OJ —— 20.有效的括号&#xff08;栈&#xff09; 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09;2.方法讲解2.1.解法2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09; 2.方法讲解 2.1.解法 利用…

Day40:139.单词拆分、背包问题总结

文章目录 139.单词拆分思路代码实现 背包问题总结背包类型递推公式 139.单词拆分 题目链接 思路 确定dp数组以及下标的含义 dp[i] : 从0开始长度为i的字符串是否可以拆分为一个或多个在字典中出现的单词确定递推公式 如果确定dp[j] 是true&#xff0c;且 [j, i] 这个区间的子…

webpack loader

1、分类 2、执行顺序 配置类型 执行顺序是 loader1>loader2>loader3 3、使用方式 自己的第一个loader 同步loader /*** loader 就是一个函数* 当webpack 解释资源时&#xff0c; 会调用相应的loader去处理* loader 接收到文件内容作为参数&#xff0c;返回文件内容* p…

【AGC】鸿蒙应用软件包上传问题解析

【问题背景】 近期收到了一些反馈&#xff0c;一些鸿蒙元服务开发者在发布应用市场的过程中&#xff0c;上传.app包时遇到了不同的报错&#xff0c;导致上传失败&#xff0c;下面来看一下这些报错的具体原因&#xff0c;如何正确打包上传。 【问题描述1】 HarmonyOS元服务软件…

刚刚!OpenAI官宣!Sam Altman回归OpenAI 担任CEO

大家好我是二狗&#xff0c;就在刚刚&#xff01; OpenAI宣布&#xff0c;Sam Altman将重新回到 OpenAI 担任CEO。 并组建由Bret Taylor&#xff08;主席&#xff09;、Larry Summers 和 Adam DAngelo 组成的新的初始董事会。 Sam Altman第一时间做了石锤回应&#xff1a; Sa…

上海亚商投顾:北证50指数持续大涨 短剧概念股再爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整&#xff0c;深成指跌超1.4%&#xff0c;创业板指跌超1.7%。北证50指数大涨超8%&#xff0c;…

Day37力扣打卡

打卡记录 美化数组的最少删除数&#xff08;贪心&#xff09; 链接 class Solution:def minDeletion(self, nums: List[int]) -> int:n, cnt len(nums), 0for i in range(n):if (i - cnt) % 2 0 and i 1 < n and nums[i] nums[i 1]:cnt 1return cnt 1 if (n - c…