豆包大模型 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工具 登录成功测试 文章详情测试 读取数据库数据 因为我们之前的数据都…...

回溯算法(C/C++)
目录 一、组合问题 组合 组合剪枝 组合总和 III编辑 组合总和编辑 组合总和 II 电话号码的字母组合编辑 二、分割问题 分割回文串 复原 IP 地址 三、集合问题 子集 子集 II 非递减子序列 四、排列问题 全排列 全排列 II 五、棋盘问题 N 皇后 课程&#x…...

物联网智慧农业一体化解决方案-可继续扩展更多使用场景
在智慧农业中,从种子、施肥、灌溉、锄地、农具管理、日常照料到蔬菜档案管理,以及与客户、供应商、市场的对接,可以通过物联网(IoT)、大数据、人工智能(AI)、区块链和云计算等技术,构建一个从生产到销售的全流程数字化、智能化农业生态系统。以下是实现方案和技术路径的…...

Jackson 详解
目录 前言 Jackson 是 Java 生态中最流行的 JSON 处理库之一,广泛应用于 RESTful API、数据存储和传输等场景。它提供了高效、灵活的 JSON 序列化和反序列化功能,支持注解、模块化设计和多种数据格式(如 XML、YAML)。本文将详细介…...

游戏引擎学习第143天
仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾并规划今天的内容 目前,我们正在进行声音混合的开发。我们已经写好了声音混合器,并且已经实现了一些功能,比如声音流播放和音量插值。过去一周我们做了很多工作,进展非常快。不…...

SLAM评估工具安装及使用EVO(Ubuntu20.04安装evo)--缺少 onnx 库还有Pandas 版本不兼容解决
介绍一下我的是ubuntu20.04.机载电脑是orinnx,通过源码烧写的系统。 首先打开终端,输入 pip install evo --upgrade --no-binary evo 安装过程中出现如下问题 缺少 onnx 库还有Pandas 版本不兼容, ONNX(Open Neural Network E…...

Nginx解决前端跨域问题
1. 理解 CORS 和同源策略 1.1 同源策略 同源策略是一种浏览器安全机制,用于阻止不同源(不同域名、协议或端口)的 Web 应用相互访问数据。它确保了 Web 应用的隔离性,防止恶意网站访问用户数据或执行不安全的操作。 同源策略下&…...

ReferenceError: assignment to undeclared variable xxx
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...

国产编辑器EverEdit - 宏功能介绍
1 宏 1.1 应用场景 宏是一种重复执行简单工作的利器,可以让用户愉快的从繁琐的工作中解放出来,其本质是对键盘和菜单的操作序列的录制,并不会识别文件的内容,属于无差别无脑执行。 特别是对一些有规律的重复按键动作,…...

图像滑块对比功能的开发记录
背景介绍 最近,公司需要开发一款在线图像压缩工具,其中的一个关键功能是让用户直观地比较压缩前后的图像效果。因此,我们设计了一个对比组件,它允许用户通过拖动滑块,动态调整两张图像的显示区域,从而清晰…...

【计算机网络】Socket
Socket 是网络通信的核心技术之一,充当应用程序与网络协议栈之间的接口。 1. Socket 定义 Socket(套接字)是操作系统提供的 网络通信抽象层,允许应用程序通过标准接口(如 TCP/IP 或 UDP)进行数据传输。它…...