豆包大模型 MarsCode AI 刷题专栏 001
001.找单独的数
难度:易
问题描述
在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。
要求:
- 设计一个算法,使其时间复杂度为 O(n),其中 n 是班级的人数。
- 尽量减少额外空间的使用,以体现你的算法优化能力。
测试样例
样例1:
输入:
cards = [1, 1, 2, 2, 3, 3, 4, 5, 5]
输出:4
解释:拿到数字 4 的同学是唯一一个没有配对的。
样例2:
输入:
cards = [0, 1, 0, 1, 2]
输出:2
解释:数字 2 只出现一次,是独特的卡片。
样例3:
输入:
cards = [7, 3, 3, 7, 10]
输出:10
解释:10 是班级中唯一一个不重复的数字卡片。
约束条件
- 1 ≤ cards.length ≤ 1001
- 0 ≤ cards[i] ≤ 1000
- 班级人数为奇数
- 除了一个数字卡片只出现一次外,其余每个数字卡片都恰好出现两次
思路提示
要解决这个问题,我们可以利用异或(XOR)运算的特性。异或运算有以下几个关键性质:
- 相同数字异或结果为0:
a ^ a = 0
- 任何数字与0异或结果为该数字本身:
a ^ 0 = a
- 异或运算满足交换律和结合律:
a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b
基于这些性质,我们可以设计一个算法来找到那个唯一的独特数字:
解题思路
- 初始化一个变量
unique_number
为0。 - 遍历数组中的每一个数字,将
unique_number
与当前数字进行异或运算。 - 最终,
unique_number
将只包含那个独特的数字,因为所有成对的数字都会通过异或运算相互抵消。
算法步骤
- 初始化
unique_number = 0
。 - 遍历数组
cards
中的每一个数字card
:- 更新
unique_number
为unique_number ^ card
。
- 更新
- 返回
unique_number
。
时间复杂度
- **O(n)**:我们只需要遍历数组一次。
空间复杂度
- **O(1)**:我们只使用了常数级别的额外空间。
通过这种方式,我们可以在不使用额外空间的情况下,以线性时间复杂度找到那个独特的数字。
MarsCode AI答案
Python:
def solution(cards):# 初始化结果变量为0result = 0# 遍历数组中的每一个元素for card in cards:# 将结果与当前元素进行异或运算result ^= card# 返回最终结果return resultif __name__ == "__main__":# 添加你的测试用例print(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) == 4)print(solution([0, 1, 0, 1, 2]) == 2)
Go:
package mainimport "fmt"func solution(cards []int) int {result := 0for _, card := range cards {result ^= card}return result
}func main() {fmt.Println(solution([]int{1, 1, 2, 2, 3, 3, 4, 5, 5}) == 4)fmt.Println(solution([]int{0, 1, 0, 1, 2}) == 2)fmt.Println(solution([]int{7, 3, 3, 7, 10}) == 10)
}
Rust:
fn solution(cards: Vec<i32>) -> i32 {// 使用异或运算来找到唯一的数字let mut unique_number = 0;for &card in &cards {unique_number ^= card;}unique_number
}fn main() {// 添加你的测试用例println!("{}", solution(vec![1, 1, 2, 2, 3, 3, 4, 5, 5]) == 4);println!("{}", solution(vec![0, 1, 0, 1, 2]) == 2);println!("{}", solution(vec![7, 3, 3, 7, 10]) == 10);
}
002.徒步旅行中的补给问题
难度:中
问题描述
小R正在计划一次从地点A到地点B的徒步旅行,总路程需要 N
天。为了在旅途中保持充足的能量,小R每天必须消耗1份食物。幸运的是,小R在路途中每天都会经过一个补给站,可以先购买完食物后再消耗今天的1份食物。然而,每个补给站的食物每份的价格可能不同,并且小R在购买完食物后最多只能同时携带 K
份食物。
现在,小R希望在保证每天食物消耗的前提下,以最小的花费完成这次徒步旅行。你能帮助小R计算出最低的花费是多少吗?
**输入 **
n
总路程需要的天数k
小R最多能同时携带食物的份数data[i]
第i天补给站每份食物的价格
**输出 **
- 返回完成这次徒步旅行的最小花费
**约束条件 **
1
<n,k
<1000
1
<data[i]
<10000
测试样例
样例1:
输入:
n = 5 ,k = 2 ,data = [1, 2, 3, 3, 2]
输出:9
样例2:
输入:
n = 6 ,k = 3 ,data = [4, 1, 5, 2, 1, 3]
输出:9
样例3:
输入:
n = 4 ,k = 1 ,data = [3, 2, 4, 1]
输出:10
问题理解
小R每天需要消耗1份食物,并且每天经过一个补给站,可以购买食物。小R最多能携带 K
份食物。我们需要找到一种策略,使得小R在旅途中花费最少。
数据结构选择
我们可以使用一个数组来存储每天的食物价格,并且使用一个变量来记录当前携带的食物数量。
算法步骤
-
初始化:
- 设置一个变量
current_food
表示当前携带的食物数量,初始为0。 - 设置一个变量
total_cost
表示总花费,初始为0。
- 设置一个变量
-
遍历每一天:
- 如果当前携带的食物数量
current_food
大于0,则消耗1份食物。 - 如果当前携带的食物数量
current_food
为0,则需要购买食物。 - 在购买食物时,需要考虑当前补给站的价格和未来几天的价格,以决定购买多少份食物。
- 如果当前携带的食物数量
-
购买策略:
- 在购买食物时,应该尽量购买未来几天价格较低的食物,以减少总花费。
- 可以使用一个滑动窗口来找到未来几天内的最低价格,并决定购买的数量。
思路说明
题目要求在给定的天数 N
和最大携带食物量 K
的限制下,计算出完成徒步旅行所需的最小花费。每天经过的补给站食物价格不同,且每天必须消耗1份食物。我们可以通过维护一个单调递增的双端队列来记录当前窗口内的最小价格,从而在每次购买食物时选择最便宜的选项。通过滑动窗口的方式,逐步计算出每天的最小花费,最终得到总的最小花费。
解题过程
- 初始化:创建一个双端队列
mins
用于存储当前窗口内的最小价格及其对应的天数。初始化结果result
为0。 - 遍历每一天:
- 维护单调队列:在每次遍历中,首先检查队列
mins
的末尾元素,如果其价格大于当前天的价格,则将其弹出,直到队列为空或队列末尾元素的价格小于等于当前天的价格。然后将当前天的价格和天数加入队列。 - 滑动窗口:检查队列
mins
的头部元素,如果其对应的天数已经不在当前窗口内(即mins[0][0] <= j - k
),则将其弹出。 - 计算花费:将当前窗口内的最小价格(即队列头部元素的价格)累加到
result
中。
- 维护单调队列:在每次遍历中,首先检查队列
- 返回结果:遍历结束后,
result
即为完成徒步旅行的最小花费。
复杂度分析
- 时间复杂度:O(N),其中 N 是天数。我们只需要遍历每一天,并且在每次遍历中,队列的插入和删除操作都是 O(1) 的时间复杂度。
- 空间复杂度:O(K),其中 K 是最大携带食物量。我们使用了一个双端队列来存储当前窗口内的最小价格,其最大长度为 K。
知识点扩展
- 双端队列(deque):双端队列是一种允许在两端进行插入和删除操作的队列。在本题中,我们使用双端队列来维护当前窗口内的最小价格,通过在队列两端进行操作,可以高效地维护单调性。
- 单调队列:单调队列是一种特殊的队列,其内部元素保持单调递增或单调递减的顺序。在本题中,我们使用单调递增队列来记录当前窗口内的最小价格,从而在每次购买食物时选择最便宜的选项。
- 滑动窗口:滑动窗口是一种常见的算法技巧,用于在数组或列表中维护一个固定大小的窗口,并对其进行操作。在本题中,我们通过滑动窗口的方式,逐步计算出每天的最小花费。
MarsCode AI答案
Python:
from collections import dequedef solution(n: int, k: int, data: list) -> int:assert n == len(data)assert k < nmins = deque()result = 0for j in range(n):while len(mins) > 0 and mins[-1][1] > data[j]:mins.pop()mins.append([j, data[j]])while mins[0][0] <= j - k:mins.popleft()result += mins[0][1]return resultif __name__ == '__main__':print(solution(n = 5 ,k = 2 ,data = [1, 2, 3, 3, 2]) == 9)print(solution(n = 6 ,k = 3 ,data = [4, 1, 5, 2, 1, 3]) == 9)print(solution(n = 4 ,k = 1 ,data = [3, 2, 4, 1]) == 10)
Go:
package mainimport ("fmt""math"
)func solution(n int, k int, data []int) int {// 初始化dp数组,dp[i]表示在第i天结束时的最小花费dp := make([]int, n+1)for i := 1; i <= n; i++ {dp[i] = math.MaxInt32 // 初始化为一个很大的值}dp[0] = 0 // 第0天不需要花费// 填充dp数组for i := 1; i <= n; i++ {for j := i - 1; j >= max(0, i-k); j-- {// 计算在第j天购买食物,然后走到第i天的总花费cost := dp[j] + data[i-1] * (i - j)if cost < dp[i] {dp[i] = cost}}}return dp[n]
}func max(a, b int) int {if a > b {return a}return b
}func main() {fmt.Println(solution(5, 2, []int{1, 2, 3, 3, 2}) == 9)fmt.Println(solution(6, 3, []int{4, 1, 5, 2, 1, 3}) == 9)fmt.Println(solution(4, 1, []int{3, 2, 4, 1}) == 10)
}
Rust:
use std::collections::VecDeque;fn solution(n: usize, k: usize, data: Vec<usize>) -> usize {assert_eq!(n, data.len());assert!(k < n);let mut mins: VecDeque<(usize, usize)> = VecDeque::new();let mut result = 0;for j in 0..n {while let Some(&(_, price)) = mins.back() {if price > data[j] {mins.pop_back();} else {break;}}mins.push_back((j, data[j]));while let Some(&(index, _)) = mins.front() {if index <= j.saturating_sub(k) {mins.pop_front();} else {break;}}result += mins.front().unwrap().1;}result
}fn main() {println!("{}", solution(5, 2, vec![1, 2, 3, 3, 2]) == 9);println!("{}", solution(6, 3, vec![4, 1, 5, 2, 1, 3]) == 9);println!("{}", solution(4, 1, vec![3, 2, 4, 1]) == 10);
}
代码解释
- VecDeque: Rust中的
VecDeque
类似于Python中的deque
,支持高效的头部和尾部操作。 - assert_eq! 和 assert!: Rust中的断言函数,用于确保输入的合法性。
- while let: Rust中的模式匹配语法,用于简化循环条件。
- saturating_sub: Rust中的饱和减法,防止下溢。
来源:https://www.marscode.cn/practice
相关文章:

豆包大模型 MarsCode AI 刷题专栏 001
001.找单独的数 难度:易 问题描述 在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上…...

python语言总结(持续更新)
本文主要是总结各函数,简单的函数不会给予示例,如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示,用以提示用户)输入函数 注释 # 单行注释符&…...
leetcode15 三数之和
1.哈希法 为了避免重复 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {set<vector<int>> temple;//使用 set 来存储符合条件的三元组,避免重复vector<vector<int>> out;//存放最终输…...
深入探讨AI-Ops架构 第一讲 - 运维的进化历程以及未来发展趋势
首先,让我们一起回顾运维的进化之路,然后再深入探讨AI-Ops架构的细节。 运维的进化历程 1. AI 大范围普及前的运维状态 (传统运维) 在AI技术尚未广泛渗透到运维领域之前,我们称之为传统运维,其主要特点是: 人工驱动…...

Android Native 之 文件系统挂载
一、文件系统挂载流程概述 二、文件系统挂载流程细节 1、Init启动阶段 众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的ÿ…...

常用word python matlab快捷键
这里写自定义目录标题 WordMatlabpythonlinuxWord Matlab 1 结构体 字符串成员做索引,必须()类似python* 解包作用,转化字符串到属性类型 如果属性名存入列表 a = [“para1”] 比如stru1.para1 = [‘c’,‘d’]; 那么若要用a中para1来索引,必须要加圆括号; ==》 X Strut…...
MySQL------存储引擎和用户和授权
9.存储引擎 1.两种引擎 MyISAM和InnoDB 2.两种区别 1.事务: MyISAM不支持事务 2.存储文件: innodb : frm、ibd MyISAM: frm、MYD、MYI 3.数据行锁定: MyISAM不支持 4.全文索引: INNODB不支持,所以MYISAM做select操作速度很快 5.外键约束: MyISAM…...

react拖曳组件react-dnd的简单封装使用
分享原因 由于项目中需要使用拖曳组件(需求:全局,跨组件,跨数据),我选择了react-dnd 概念 React DnD 是一组 React 高阶组件,我们在使用的时候只需要将目标元素进行包裹,就可以实现目标元素具有拖动或接受拖动的功能。…...
Excel中COUNTIF用法解析
COUNTIF 是 Excel 中一个非常实用的函数,用于统计满足某个条件的单元格数量。它的基本语法如下: 基本语法 COUNTIF(范围, 条件) 范围:需要统计的单元格区域,例如 A1:A10 或整列 A:A。 条件:用于判断哪些单元格需要被…...

Uniapp 页面返回不刷新?两种方法防止 onShow 触发多次请求!
目录 前言1. 变量(不生效)2. 延迟(生效) 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 在 Uniapp 中,使用 onShow() 钩子来监听页面显示࿰…...
《论数据湖技术及其应用》审题技巧 - 系统架构设计师
论题写作框架 一、考点概述 “数据湖技术及其应用”这一论题主要考察的是软件测试工程师对于前沿数据存储与处理技术的理解及其在软件开发项目中的实际应用能力。具体而言,该论题涵盖了以下几个核心考点: 软件项目管理与开发经验 :要求考生…...

C++蓝桥杯基础篇(八)
片头 嗨~小伙伴们,大家好!今天我们一起来学习C蓝桥杯基础篇(八),练习相关字符串的习题,准备好了吗?Are you ready? Lets go! 第1题 字符串中的数字个数 这道题,我们用字符数组或者…...

AI 实战 - pytorch框架基于retinaface实现face检测
pytorch框架基于retinaface实现face检测 简介模型结构MobileNet-0.25SSH结构Head结构 Anchor编解码 环境开发环境 数据简介 训练测试参考 简介 RetinaFace是在RetinaNet基础上引申出来的人脸检测框架,所以大致结构和RetinaNet非常像。 主要改进:1.Mobi…...

如何在PHP中实现API版本管理:保持向后兼容性
如何在PHP中实现API版本管理:保持向后兼容性 在现代Web开发中,API(应用程序编程接口)是连接前端和后端的关键桥梁。随着业务需求的不断变化,API的版本管理变得尤为重要。良好的版本管理策略不仅能够确保新功能的顺利引…...

Docker Compose企业示例
利用容器编排完成haproxy和nginx负载均衡架构实施 1.mkdir docker.test 2.touch haproxy.yml 3.mkdir /var/lib/docker/volumes/conf 4.dnf install haproxy -y --downloadonly --downloaddir/xixi:下载内容到/xixi目录下 5. rpm2cpio haproxy-2.4.22-4.el9.x8…...

TMS320F28P550SJ9学习笔记6:SCI所有寄存器__结构体寄存器方式配置 SCI通信初始化__库函数发送测试
继续学习如何使用结构体寄存器的方式配置这款单片机的外设,这里配置SCI通信的初始化 但SCI gpio 的初始化还是调用的库函数比较方便,它的发送部分页调用了库函数 有关收发方面的逻辑,我会在之后重新自己写一次 文章提供测试代码讲解、完整…...
详细探索如何用脚本实现M小ySQL一键安装与配置,提升运维效率!
以下是基于脚本实现MySQL一键安装与配置的详细方案,涵盖Linux主流系统(CentOS/Ubuntu)及Windows环境,结合自动化部署与高可用性扩展,旨在提升运维效率: 一、Linux系统(CentOS 7.x)一…...

无人机推流/RTMP视频推拉流:EasyDSS无法卸载软件的原因及解决方法
视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务,在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外,平台还支持用户自行上传视频文件,也可将上传的点播…...

增删改查 数据下载 一键编辑 删除
index 首页 <template><div class"box"><el-card :style"{ width: treeButton ? 19.5% : 35px, position: relative, transition: 1s }"><el-tree v-if"treeButton" :data"treeData" :props"defaultPro…...

【Go学习实战】03-2-博客查询及登录
【Go学习实战】03-2-博客查询及登录 读取数据库数据初始化数据库首页真实数据分类查询分类查询测试 文章查询文章查询测试 分类文章列表测试 登录功能登录页面登录接口获取json参数登录失败测试 md5加密jwt工具 登录成功测试 文章详情测试 读取数据库数据 因为我们之前的数据都…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
视觉slam--框架
视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图? 建图并没有一个固定的形式和算法…...

Java多线程从入门到精通
一、基础概念 1.1 进程与线程 进程是指运行中的程序。 比如我们使用浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。 线程是CPU调度的基本单位,每个线程执行的都是某一个进程的代码的某…...