字节青训Marscode_5:寻找最大葫芦——最新题解
步骤1:问题定义与分析
-
输入条件:
- 整数n:牌的数量
- 整数max:葫芦牌面值之和的上限
- 数组array:n张牌的牌面值
-
输出条件:
- 两个整数组成的数组[a,b]:
- a表示三张相同牌的牌面值
- b表示两张相同牌的牌面值
- 如果不存在符合条件的葫芦,返回[0,0]
- 两个整数组成的数组[a,b]:
-
限制条件:
- 牌面值规则:A(1) < 2 < 3 < ... < 10 < J(11) < Q(12) < K(13)
- 3×a + 2×b ≤ max
- 需要找到最大的有效组合(先比较三张牌的大小,再比较两张牌的大小)
-
边界条件:
- 输入数组中没有足够的相同牌组成葫芦
- 所有可能的组合都超过max值
- 输入数组为空或长度不足
步骤2:算法设计与分析
最优解决方案:贪心算法
- 统计每个牌面值出现的次数
- 分别找出可以作为三张牌和两张牌的候选值
- 对候选值排序后,采用贪心策略寻找最优解
时间复杂度分析:
- 统计频次:O(n)
- 排序候选值:O(k log k),其中k为不同牌面值的数量
- 寻找最优解:O(k²) 总体时间复杂度:O(n + k² + k log k),其中k ≤ 13
空间复杂度:O(k),用于存储频次统计和候选值
#include <algorithm>
#include <iostream>
#include <unordered_map>
#include <vector>// 用于比较牌面大小的辅助函数
int getCompareValue(int card) {// A牌(值为1)在比较时应该是最大的return card == 1 ? 14 : card;
}// 用于计算和的辅助函数
int getSumValue(int card) {// 计算和时使用原始值return card;
}
std::vector<int> solution(int n, int max, const std::vector<int>& array) {// 特殊情况处理if (n < 5) return {0, 0};// 统计频次std::unordered_map<int, int> countMap;for (int card : array) {countMap[card]++;}// 收集候选值std::vector<int> triples, pairs;for (const auto& [card, count] : countMap) {// 注意:一个牌面值如果出现4次,既可以用作triple也可以用作pairif (count >= 3) {triples.push_back(card);}if (count >= 2) {pairs.push_back(card);}}// 验证是否有足够的候选值if (triples.empty() || pairs.empty()) {return {0, 0};}// 对候选值进行排序(考虑A牌的特殊性)auto compareCards = [](int a, int b) {int valueA = (a == 1) ? 14 : a; // A牌特殊处理int valueB = (b == 1) ? 14 : b;return valueA > valueB;};std::sort(triples.begin(), triples.end(), compareCards);std::sort(pairs.begin(), pairs.end(), compareCards);// 寻找最优组合int bestTriple = 0, bestPair = 0;for (int triple : triples) {for (int pair : pairs) {// 跳过使用同一个牌面值的情况if (triple == pair) continue;// 检查是否满足最大值限制int sum = 3 * triple + 2 * pair;if (sum <= max) {// 找到一个有效组合bestTriple = triple;bestPair = pair;goto found; // 由于已排序,第一个找到的就是最优解}}}found:return bestTriple > 0 ? std::vector<int>{bestTriple, bestPair} : std::vector<int>{0, 0};
}
步骤4:解题启发
-
值的二元性处理:
- 分离比较逻辑和计算逻辑
- 使用辅助函数明确区分不同场景下的值处理
-
排序策略的灵活运用:
- 自定义比较函数处理特殊规则
- 保持原始值用于计算约束
-
优化空间的发现:
- A牌的特殊性质提供了独特的优化机会
- 在满足约束的同时最大化结果
- 金融交易系统:
struct Transaction {double nominalValue; // 面值double tradingValue; // 交易值double getValueForRisk() {// 风险计算使用面值return nominalValue;}double getValueForTrading() {// 交易使用交易值return tradingValue;} }; - 商品定价系统:
class Product {double costPrice; // 成本价double marketPrice; // 市场价double getPriceForInventory() {// 库存估值使用成本价return costPrice;}double getPriceForSale() {// 销售使用市场价return marketPrice;} };
相关文章:
字节青训Marscode_5:寻找最大葫芦——最新题解
步骤1:问题定义与分析 输入条件: 整数n:牌的数量整数max:葫芦牌面值之和的上限数组array:n张牌的牌面值 输出条件: 两个整数组成的数组[a,b]: a表示三张相同牌的牌面值b表示两张相同牌的牌面值如…...
MySQL —— MySQL 程序
目录 前言 一、MySQL 程序简介 二、mysqld -- MySQL 服务器 三、mysql -- MySQL 客户端 1. mysql 客户端简介 2. mysql 客户端选项 (1)指定选项的方式 (2)mysql 客户端命令常用选项 (3)在命令行中使…...
LLamafactory API部署与使用异步方式 API 调用优化大模型推理效率
文章目录 背景介绍第三方大模型API 介绍LLamafactory 部署API大模型 API 调用工具类项目开源 背景介绍 第三方大模型API 目前,市面上有许多第三方大模型 API 服务提供商,通过 API 接口向用户提供多样化的服务。这些平台不仅能提供更多类别和类型的模型…...
不玩PS抠图了,改玩Python抠图
网上找了两个苏轼的印章图片: 把这两个印章抠出来的话,对于不少PS高手来说是相当容易,但是要去掉其中的水印,可能要用仿制图章慢慢描绘,图章的边缘也要慢慢勾画或者用通道抠图之类来处理,而且印章的红色也不…...
三维渲染中顺序无关的半透明混合(OIT)(一Depth Peeling)
>本文收集关于透明对象渲染技术中关于OIT技术的资料,尝试用简单的逻辑对这些内容进行整理。 1、透明对象的特殊对待 不要小瞧png图片和jpg图片的差异!在一般的三维平台,png代表的是带透明通道的纹理,而jpg代表的是不带透明的…...
Linux零基础入门--Makefile和make--纯干货无废话!!
目录 Makefile的概念与使用 Makefile的编写 多个源文件的Makefile编写 Makefile的概念与使用 Makefile其实是linux中的一种包含构建指令的文件,用于自动化构建 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefi…...
vim编辑器的一些配置和快捷键
记录vim编辑器的一些配置和快捷键,边学边用: yy 复制dd 删除p:粘贴ctrly 取消撤销u:撤销:w 写入:q 退出a/i 插入O: 上方插入一个空行o:下方插入一个空行:e 打开文件编辑 其他配置: 上移一行和下移一行&a…...
电子应用设计方案-31:智能AI音响系统方案设计
智能 AI 音响系统方案设计 一、引言 智能 AI 音响作为一种新兴的智能家居设备,通过融合语音识别、自然语言处理、音频播放等技术,为用户提供便捷的语音交互服务和高品质的音乐体验。本方案旨在设计一款功能强大、性能稳定、用户体验良好的智能 AI 音响系…...
【设计模式】【结构型模式(Structural Patterns)】之装饰模式(Decorator Pattern)
1. 设计模式原理说明 装饰模式(Decorator Pattern) 是一种结构型设计模式,它允许在不改变对象接口的前提下,动态地给对象增加额外的责任或功能。这种模式创建了一个装饰类,用于包装原有的类,并在保持类方法…...
【AI】JetsonNano启动时报错:soctherm OC ALARM
1、问题描述 将JetsonNano烧写SD卡镜像为Ubuntu20.04后,启动时报错:soctherm OC ALARM,启动失败;然后系统一直重启 2、原因分析 “soctherm OC ALARM”是检测到系统温度超过安全阈值时发出的过热警告。 “soctherm”代表系统…...
QT:生成二维码 QRCode
目录 1.二维码历史2.QT源码3.界面展示4.工程源码链接 1.二维码历史 二维码(2-Dimensional Bar Code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。它是指在一维条码…...
【LeetCode刷题之路】120:三角形最小路径和的两种解法(动态规划优化)
LeetCode刷题记录 🌐 我的博客主页:iiiiiankor🎯 如果你觉得我的内容对你有帮助,不妨点个赞👍、留个评论✍,或者收藏⭐,让我们一起进步!📝 专栏系列:LeetCode…...
神经网络中常见的激活函数Sigmoid、Tanh和ReLU
激活函数在神经网络中起着至关重要的作用,它们决定了神经元的输出是否应该被激活以及如何非线性地转换输入信号。不同的激活函数适用于不同的场景,选择合适的激活函数可以显著影响模型的性能和训练效率。以下是三种常见的激活函数:Sigmoid、T…...
适用于学校、医院等低压用电场所的智能安全配电装置
引言 电力,作为一种清洁且高效的能源,极大地促进了现代生活的便捷与舒适。然而,与此同时,因使用不当或维护缺失等问题,漏电、触电事件以及电气火灾频发,对人们的生命安全和财产安全构成了严重威胁…...
基于python爬虫的智慧人才数据分析系统
废话不多说,先看效果图 更多效果图可私信我获取 源码分享 import os import sysdef main():"""Run administrative tasks."""os.environ.setdefault(DJANGO_SETTINGS_MODULE, 智慧人才数据分析系统.settings)try:from django.core.m…...
LeetCode-315. Count of Smaller Numbers After Self
目录 题目描述 解题思路 【C】 【Java】 复杂度分析 LeetCode-315. Count of Smaller Numbers After Selfhttps://leetcode.com/problems/count-of-smaller-numbers-after-self/description/ 题目描述 Given an integer array nums, return an integer array counts whe…...
根据导数的定义计算导函数
根据导数的定义计算导函数 1. Finding derivatives using the definition (使用定义求导)1.1. **We want to differentiate f ( x ) 1 / x f(x) 1/x f(x)1/x with respect to x x x**</font>1.2. **We want to differentiate f ( x ) x f(x) \sqrt{x} f(x)x wi…...
WPF关于打开新窗口获取数据的回调方法的两种方式
一种基于消息发送模式 一种基于回调机制 基于消息发送模式 父页面定义接收的_selectedPnNumberStandarMsg保证是唯一 Messenger.Default.Register<PlateReplaceApplyModel>(this, _selectedPnNumberStandarMsgToken, platePnNumberModel > { …...
复杂网络(四)
一、规则网络 孤立节点网络全局耦合网络(又称完全网络)星型网络一维环二维晶格 编程实践: import networkx as nx import matplotlib.pyplot as pltn 10 #创建孤立节点图 G1 nx.Graph() G1.add_nodes_from(list(range(n))) plt.figure(f…...
用MATLAB符号工具建立机器人的动力学模型
目录 介绍代码功能演示拉格朗日方法回顾求解符号表达式数值求解 介绍 开发机器人过程中经常需要用牛顿-拉格朗日法建立机器人的动力学模型,表示为二阶微分方程组。本文以一个二杆系统为例,介绍如何用MATLAB符号工具得到微分方程表达式,只需要…...
80+经典游戏宽屏焕新:WidescreenFixesPack重塑怀旧体验
80经典游戏宽屏焕新:WidescreenFixesPack重塑怀旧体验 【免费下载链接】WidescreenFixesPack Plugins to make or improve widescreen resolutions support in games, add more features and fix bugs. 项目地址: https://gitcode.com/gh_mirrors/wi/WidescreenFi…...
小红书数据采集系统深度探索:从技术原理到实战落地
小红书数据采集系统深度探索:从技术原理到实战落地 【免费下载链接】XiaohongshuSpider 小红书爬取 项目地址: https://gitcode.com/gh_mirrors/xia/XiaohongshuSpider 在当今数据驱动的时代,小红书作为内容丰富的社交平台,其数据价值…...
LFM2.5-1.2B-Thinking-GGUF部署指南:ss端口监听+curl health检测标准化运维流程
LFM2.5-1.2B-Thinking-GGUF部署指南:ss端口监听curl health检测标准化运维流程 1. 平台简介 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,特别适合在资源有限的环境中快速部署和使用。这个镜像内置了GGUF模型文件和llama.cpp运行时…...
离散数学实战:用Python解决图论问题(附完整代码示例)
离散数学实战:用Python解决图论问题(附完整代码示例) 当你在社交软件上查看"可能认识的人"推荐,或是用导航软件规划最短路线时,背后都在运行图论算法。作为离散数学中最具工程价值的领域,图论将现…...
轻量级PDF渲染库PdfiumAndroid:Android开发者的高效集成指南
轻量级PDF渲染库PdfiumAndroid:Android开发者的高效集成指南 【免费下载链接】PdfiumAndroid 项目地址: https://gitcode.com/gh_mirrors/pd/PdfiumAndroid 核心价值:为什么选择PdfiumAndroid? 📌 解决PDF渲染痛点&#…...
STM32模拟Linux内核自动初始化机制实现
STM32模拟Linux内核自动初始化机制实现1. 项目概述1.1 技术背景在传统嵌入式开发中,程序通常按照顺序逻辑执行,当系统复杂度增加时会导致代码臃肿、模块耦合紧密。Linux内核通过initcall机制实现了模块化初始化,本项目在STM32平台上模拟实现了…...
计算机网络 之 【自定义协议、序列化与反序列化】(C++使用JSON示例)
目录 1.自定义协议与序列化/反序列化 2.Json简介 Json是什么 第三方库提供,使用时包含头文件 JSON 的数据类型 JSON结构示例 C使用JSON示例 1.自定义协议与序列化/反序列化 协议的必要性 协议是通信双方的约定,它定义了数据的格式和含义ÿ…...
WarcraftHelper终极指南:让魔兽争霸3在现代系统完美重生
WarcraftHelper终极指南:让魔兽争霸3在现代系统完美重生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上的各…...
DeepSeek LintCode 3866.有效子数组的数量 public int validSubarrays(int[] nums)
这是关于LintCode 3866 “有效子数组的数量”的问题。这是一个典型的单调栈应用问题,需要计算数组中所有满足特定条件的子数组数量。 问题理解 有效子数组的定义: 对于数组 nums 中的某个子数组 nums[i..j](i ≤ j),如…...
保姆级教程:用Cloudreve+Obsidian打造私人云笔记(附WebDAV配置避坑指南)
零基础构建私有知识库:Cloudreve与Obsidian的完美联姻 在信息爆炸的时代,如何高效管理个人知识资产已成为现代人的刚需。想象一下:你正在咖啡馆用iPad记录灵感,回到家打开电脑时这些想法已自动同步;出差途中用手机查阅…...
