算法训练营 Day1

news2025/7/15 23:24:30

努力追上那个曾经被寄予厚望的自己

                                                        —— 25.4.25

一、LeetCode_26 删除有序数组中的重复项

给你⼀个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现⼀次 ,返回删除后数组的
新⻓度。元素的 相对顺序 应该保持 ⼀致 。
由于在某些语⾔中不能改变数组的⻓度,所以必须将结果放在数组nums的第⼀部分。更规范地说,如果在删除重
复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插⼊ nums 的前 k 个位置后返回 k 。
不要使⽤额外的空间,你必须在 原地 修改输⼊数组并在使⽤ O(1) 额外空间的条件下完成。

思路:

解题要点是要判断数组是否有重复元素,

而另一个要点是 题目只要求返回最终删除数组后的剩余数量,而并不是要求返回删除后的剩余数组
因此,我们可以重新定义一个变量,初始化为0,再用原先数组从头开始遍历
将不重复的元素放入数组的前面,并返回新变量的值,即为最终删除数组后的剩余数量。

map() 函数是一个内置的高阶函数,它的主要作用是对可迭代对象(如列表、元组等)中的每个元素应用指定的函数,并返回一个迭代器,该迭代器会生成函数应用后的结果。
    参数1 function:指定一个函数,该函数将作用于可迭代对象中的每个元素。
    参数2 iterable:指定一个可迭代对象,如列表、元组等,该对象中的每个元素都将被函数处理。
    返回值:返回一个迭代器,该迭代器会生成函数应用后的结果。

'''
给你⼀个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现⼀次 ,返回删除后数组的
新⻓度。元素的 相对顺序 应该保持 ⼀致 。
由于在某些语⾔中不能改变数组的⻓度,所以必须将结果放在数组nums的第⼀部分。更规范地说,如果在删除重
复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插⼊ nums 的前 k 个位置后返回 k 。
不要使⽤额外的空间,你必须在 原地 修改输⼊数组并在使⽤ O(1) 额外空间的条件下完成。
'''


'''
思路:解题要点是要判断数组是否有重复元素,而另一个要点是 题目只要求返回最终删除数组后的剩余数量,而并不是要求返回删除后的剩余数组
因此,我们可以重新定义一个变量,初始化为0,再用原先数组从头开始遍历
将不重复的元素放入数组的前面,并返回新变量的值,即为最终删除数组后的剩余数量。

map() 函数是一个内置的高阶函数,它的主要作用是对可迭代对象(如列表、元组等)中的每个元素应用指定的函数,并返回一个迭代器,该迭代器会生成函数应用后的结果。
    参数1 function:指定一个函数,该函数将作用于可迭代对象中的每个元素。
    参数2 iterable:指定一个可迭代对象,如列表、元组等,该对象中的每个元素都将被函数处理。
    返回值:返回一个迭代器,该迭代器会生成函数应用后的结果。
'''

# def removeDuplicates(nums):
#     if not nums:
#         return 0
#     n = len(nums)
#     i = 0
#     for j in range(n):
#         if j == 0 or nums[j] != nums[j - 1]:
#             nums[i] = nums[j]
#             i += 1
#     return i

def removeDuplicates(nums):
    if not nums:
        return 0
    n = len(nums)
    i = 0
    for j in range(n):
        if j == n - 1 or nums[j] != nums[j + 1]:
            nums[i] = nums[j]
            i += 1
    return i


nums1 = [1, 1, 2]
print(removeDuplicates(nums1))

nums2 = []
print(removeDuplicates(nums2))

nums3 = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4]
print(removeDuplicates(nums3))

nums = input("请输入您给出的数组,输入请按照空格进行分割:\n")
nums = list(map(int, nums.split(",")))
print("根据您输入的结果,不重复的数组长度为:", removeDuplicates(nums))


二、LeetCode_27 移除元素

给你⼀个数组 nums 和⼀个值 val ,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新⻓度。
不要使⽤额外的数组空间,你必须仅使⽤ O(1) 额外空间并 原地 修改输⼊数组。
元素的顺序可以改变。你不需要考虑数组中超出新⻓度后⾯的元素。

思路

定义一个指针 i,指向数组中不等于 val 的元素,遍历数组,

对于数组中每一个元素 nums[j],如果不等于值 val,
就将其赋值给 指针i 的位置,然后将 指针i 后移
最终返回指针 i,即为原数组中不等于值 val 的元素的个数

python中从键盘输入一个列表(数组)应该使用:
   list(map(int, input("请您输入一个数组:").split(",")))
   输入数组以","分成每个元素,对于每个元素使用 int() 函数转化为整数

'''
给你⼀个数组 nums 和⼀个值 val ,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新⻓度。
不要使⽤额外的数组空间,你必须仅使⽤ O(1) 额外空间并 原地 修改输⼊数组。
元素的顺序可以改变。你不需要考虑数组中超出新⻓度后⾯的元素。
'''

'''
思路:定义一个指针 i,指向数组中不等于 val 的元素,遍历数组,对于数组中每一个元素 nums[j],如果不等于值 val
就将其赋值给 指针i 的位置,然后将 指针i 后移
最终返回指针 i,即为原数组中不等于值 val 的元素的个数

python中从键盘输入一个列表(数组)应该使用:
   list(map(int, input("请您输入一个数组:").split(",")))
   输入数组以","分成每个元素,对于每个元素使用 int() 函数转化为整数
'''

def removeElement(nums, val):
    i = 0
    for j in range(len(nums)):
        if nums[j] != val:
            nums[i] = nums[j]
            i += 1
    return i

input_nums = list(map(int, input("请您输入一个数组:").split(",")))
res = removeElement(list(input_nums), int(input("请您输入要删除的元素:")))
print("移除后数组的新长度为:", res)


三、LeetCode 283 移动零

给定⼀个数组 nums ,编写⼀个函数将所有 0 移动到数组的末尾,同时保持⾮零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进⾏操作。

思路

定义一个指针 i,遍历数组nums,如果 nums[j] 不等于 0,则将其赋值给 nums[i],然后 i 后移一位。
最后,将 i 之后的元素全部赋值为 0。
返回修改后的数组 nums

'''
给定⼀个数组 nums ,编写⼀个函数将所有 0 移动到数组的末尾,同时保持⾮零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进⾏操作。
'''

'''
思路:定义一个指针 i,遍历数组nums,如果 nums[j] 不等于 0,则将其赋值给 nums[i],然后 i 后移一位。
最后,将 i 之后的元素全部赋值为 0。
返回修改后的数组 nums
'''
def moveZeroes(nums):
    i = 0
    n = len(nums)
    for j in range(n):
        if nums[j] != 0:
            nums[i] = nums[j]
            i += 1
    for j in range(i, n):
        nums[j] = 0
    return nums

nums1 = [0, 1, 0, 3, 12]
print(moveZeroes(nums1))

nums = list(map(int, input("请输入一个数组,用逗号隔开:").split(",")))
print(moveZeroes(nums))


四、LeetCode 485 最大连续1的个数

给定⼀个⼆进制数组 nums , 计算其中最⼤连续 1 的个数。
示例 1:
输⼊:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最⼤连续 1 的个数是 3.
示例 2:
输⼊:nums = [1,0,1,1,0,1] 输出:2
提示:
1 <= nums.length <= 10^5
nums[i] 不是 0 就是 1 .

思路

遍历传入的列表,如果当前位置的列表(数组)元素为1,则将计数器count加1,并更新最大值maxCount;

如果当前位置的元素为0,则计数器count清零。重新计算

'''
给定⼀个⼆进制数组 nums , 计算其中最⼤连续 1 的个数。
示例 1:
输⼊:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最⼤连续 1 的个数是 3.
示例 2:
输⼊:nums = [1,0,1,1,0,1] 输出:2
提示:
1 <= nums.length <= 10^5
nums[i] 不是 0 就是 1 .

遍历传入的列表,如果当前位置的列表(数组)元素为1,则将计数器count加1,并更新最大值maxCount;如果当前位置的元素为0,则计数器count清零。重新计算
'''


def findMaxConsecutiveOnes(nums):
    maxCount = 0
    count = 0
    n = len(nums)
    for i in range(n):
        if nums[i] == 1:
            count += 1
            maxCount = max(maxCount, count)  # 更新最大值
        else:
            count = 0  # 遇到0,计数器清零
    return maxCount


nums = list(map(int, input("请输入一个0/1数组,用逗号隔开:").split(",")))
maxCount = findMaxConsecutiveOnes(nums)
print("最⼤连续 1 的个数是:", maxCount)

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

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

相关文章

【linux】Chrony服务器

简介 1.1 时间的重要性 由于 IT 系统中&#xff0c;准确的计时非常重要&#xff0c;有很多种原因需要准确计时&#xff1a; 在网络传输中&#xff0c;数据包括和日志需要准确的时间戳 各种应用程序中&#xff0c;如订单信息&#xff0c;交易信息等 都需要准确的时间戳 1.2 时区…

技术视界 | 数据的金字塔:从仿真到现实,机器人学习的破局之道

在人工智能的世界里&#xff0c;有一个共识正逐渐达成——谁掌握了数据&#xff0c;谁就掌握了未来。 尤其是在机器人技术迅速演进的今天&#xff0c;“如何让机器人理解世界、学习操作”这一问题的根源&#xff0c;越来越回归到数据本身。正如一座金字塔般&#xff0c;不同层…

wsl联通外网

在C:\Users<你的用户名>下&#xff0c;新建.wslconfig文件添加如下配置&#xff08;具体配置参考官方文档&#xff09;&#xff1a; # Settings apply across all Linux distros running on WSL 2 [wsl2]# Limits VM memory to use no more than 4 GB, this can be set …

shadcn/radix-ui的tooltip高度定制arrow位置

尝试了半天&#xff0c;后来发现&#xff0c;不支持。。。。。就是不支持 那箭头只能居中 改side和align都没用&#xff0c;下面有在线实例 https://codesandbox.io/p/sandbox/radix-ui-slider-forked-zgn7hj?file%2Fsrc%2FApp.tsx%3A69%2C21 但是呢&#xff0c; 第一如果…

【专题刷题】二分查找(二)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码&#xff1b;&#xff…

C++_数据结构_详解红黑树

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 小伞的主页&#xff1a;xiaosan_blog 制作不易&#xff01;点个赞吧&#xff01;&#xff01;谢谢喵&#xff01;&…

数据结构手撕--【二叉树】

目录 定义结构体&#xff1a; 初始化&#xff1a; 手动创建一个二叉树&#xff1a; 前序遍历&#xff1a; 中序遍历&#xff1a; 后序遍历 二叉树节点个数&#xff1a; 叶子节点个数&#xff1a; 二叉树第k层节点个数&#xff1a; 二叉树的高度&#xff1a; 查找值为x…

.NET MAUI 发展历程:从 Xamarin 到现代跨平台应用开发框架

文章目录 引言Xamarin 起源&#xff1a;MAUI 的前身Xamarin 的创立&#xff08;2011年&#xff09;Xamarin Studio 与 Visual Studio 集成&#xff08;2013年&#xff09;Xamarin.Forms 的诞生&#xff08;2014年&#xff09;微软收购Xamarin&#xff08;2016年&#xff09; .N…

多模态大语言模型arxiv论文略读(四十)

The Wolf Within: Covert Injection of Malice into MLLM Societies via an MLLM Operative ➡️ 论文标题&#xff1a;The Wolf Within: Covert Injection of Malice into MLLM Societies via an MLLM Operative ➡️ 论文作者&#xff1a;Zhen Tan, Chengshuai Zhao, Raha M…

【蓝桥杯选拔赛真题104】Scratch回文数 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch回文数 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 四、程序编写 五、考点分析 六、推荐资料 1、scratch资料 2、python资料 3、C++资料 scratch回文数 第十五届青少年蓝桥杯scratch编…

OpenWrt 与 Docker:打造轻量级容器化应用平台技术分享

文章目录 前言一、OpenWrt 与 Docker 的集成前提1.1 硬件与内核要求1.2 软件依赖 二、Docker 环境部署与验证2.1 基础服务配置2.2 存储驱动适配 三、容器化应用部署实践3.1 资源限制策略3.2 Docker Compose 适配 四、性能优化与监控4.1 容器资源监控4.2 镜像精简策略 五、典型问…

C++初阶----模板初阶

引言 什么是模板 模板是泛型编程的基础&#xff0c;泛型编程是以一种独立于任何特定类型的方式编写代码。 模板也是创建泛型类或者函数的蓝图。 如&#xff1a;库容器&#xff0c;迭代器和算法&#xff0c;都是泛型编程的例子 1. 泛型编程 首先&#xff0c;我们应该了解什么是…

网络流量分析 | 流量分析基础

流量分析是网络安全领域的一个子领域&#xff0c;其主要重点是调查网络数据&#xff0c;以发现问题和异常情况。本文将涵盖网络安全和流量分析的基础知识。 网络安全与网络中的数据 网络安全的两个最关键概念就是&#xff1a;认证&#xff08;Authentication&#xff09;和授…

C语言文件操作完全手册:读写·定位·实战

1.什么是文件 1.1文件的概念 文件&#xff08;File&#xff09;是计算机中用于持久化存储数据的基本单位。它可以存储文本、图片、音频、程序代码等各种信息&#xff0c;并在程序运行结束后仍然保留数据。 1.2文件名 一个文件要有一个唯一的文件标识&#xff0c;以便用户识别…

多模态大语言模型arxiv论文略读(三十七)

A Spectrum Evaluation Benchmark for Medical Multi-Modal Large Language Models ➡️ 论文标题&#xff1a;A Spectrum Evaluation Benchmark for Medical Multi-Modal Large Language Models ➡️ 论文作者&#xff1a;Jie Liu, Wenxuan Wang, Yihang Su, Jingyuan Huan, …

SpringBoot 学习

什么是 SpringBoot SpringBoot 是基于 Spring 生态的开源框架&#xff0c;旨在简化 Spring 应用的初始化搭建和开发配置。它通过约定大于配置的理念&#xff0c;提供快速构建生产级应用的解决方案&#xff0c;显著降低开发者对 XML 配置和依赖管理的负担。 特点&#xff1a; …

VuePress 使用教程:从入门到精通

VuePress 使用教程&#xff1a;从入门到精通 VuePress 是一个以 Vue 驱动的静态网站生成器&#xff0c;它为技术文档和技术博客的编写提供了优雅而高效的解决方案。无论你是个人开发者、团队负责人还是开源项目维护者&#xff0c;VuePress 都能帮助你轻松地创建和管理你的文档…

卷积神经网络--手写数字识别

本文我们通过搭建卷积神经网络模型&#xff0c;实现手写数字识别。 pytorch中提供了手写数字的数据集 &#xff0c;我们可以直接从pytorch中下载 MNIST中包含70000张手写数字图像&#xff1a;60000张用于训练&#xff0c;10000张用于测试 图像是灰度的&#xff0c;28x28像素 …

SQL Server 2019 安装与配置详细教程

一、写在最前的心里话 和 MySQL 对比&#xff0c;SQL Server 的安装和使用确实要处理很多细节&#xff1a; 需要选择配置项很多有“定义实例”的概念&#xff0c;同一机器可以运行多个数据库服务设置身份验证方式时&#xff0c;需要同时配置 Windows 和 SQL 登录要想 Spring …

MyBatisPlus文档

一、MyBatis框架回顾 使用springboot整合Mybatis,实现Mybatis框架的搭建 1、创建示例项目 (1)、创建工程 新建工程 创建空工程 创建模块 创建springboot模块 选择SpringBoot版本 (2)、引入依赖 <dependencies><dependency><groupId>org.springframework.…