豆包大模型 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<10001<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工具 登录成功测试 文章详情测试 读取数据库数据 因为我们之前的数据都…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
