当前位置: 首页 > news >正文

青岛网站建设找润商中山建设信息网站

青岛网站建设找润商,中山建设信息网站,中国建设银行阜阳分行网站,wordpress文章相关文章步骤1:问题定义与分析 输入条件: 整数n:牌的数量整数max:葫芦牌面值之和的上限数组array:n张牌的牌面值 输出条件: 两个整数组成的数组[a,b]: a表示三张相同牌的牌面值b表示两张相同牌的牌面值如…

步骤1:问题定义与分析

  1. 输入条件:

    • 整数n:牌的数量
    • 整数max:葫芦牌面值之和的上限
    • 数组array:n张牌的牌面值
  2. 输出条件:

    • 两个整数组成的数组[a,b]:
      • a表示三张相同牌的牌面值
      • b表示两张相同牌的牌面值
    • 如果不存在符合条件的葫芦,返回[0,0]
  3. 限制条件:

    • 牌面值规则:A(1) < 2 < 3 < ... < 10 < J(11) < Q(12) < K(13)
    • 3×a + 2×b ≤ max
    • 需要找到最大的有效组合(先比较三张牌的大小,再比较两张牌的大小)
  4. 边界条件:

    • 输入数组中没有足够的相同牌组成葫芦
    • 所有可能的组合都超过max值
    • 输入数组为空或长度不足

步骤2:算法设计与分析

最优解决方案:贪心算法

  1. 统计每个牌面值出现的次数
  2. 分别找出可以作为三张牌和两张牌的候选值
  3. 对候选值排序后,采用贪心策略寻找最优解

时间复杂度分析:

  • 统计频次: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:解题启发

  1. 值的二元性处理:

    • 分离比较逻辑和计算逻辑
    • 使用辅助函数明确区分不同场景下的值处理
  2. 排序策略的灵活运用:

    • 自定义比较函数处理特殊规则
    • 保持原始值用于计算约束
  3. 优化空间的发现:

    • A牌的特殊性质提供了独特的优化机会
    • 在满足约束的同时最大化结果
  1. 金融交易系统:
    struct Transaction {double nominalValue;     // 面值double tradingValue;     // 交易值double getValueForRisk() {// 风险计算使用面值return nominalValue;}double getValueForTrading() {// 交易使用交易值return tradingValue;}
    };
  2. 商品定价系统:
    class Product {double costPrice;        // 成本价double marketPrice;      // 市场价double getPriceForInventory() {// 库存估值使用成本价return costPrice;}double getPriceForSale() {// 销售使用市场价return marketPrice;}
    };

http://www.yayakq.cn/news/990110/

相关文章:

  • 番禺网站建设怎么样10天搞定网站开发
  • 网站建站网站80s隐秘而伟大淘宝联盟怎么做自己的网站
  • 做网站标志过程企业网站有哪些内容
  • 模板网站和定制网站影响排名网站建设会出现哪些问题
  • 网站服务器返回状态码404手机网页版浏览器
  • 网络爬虫需要自己做网站吗用凡科做网站好弄吗
  • 常州住房和城乡建设局网站网站分辨率做96是否会更好
  • 设计师的个人网站医院网站html模板
  • 交互式网站设计怎么做做头像的网站自己的名字
  • 网站促销广告密云青岛网站建设
  • 南宁本地网站北京网站建设公司分享网站改版注意事项
  • 四川市网站建设龙岗网站设计公司
  • 微信链接的微网站怎么做的住房和城乡建设厅焊工证
  • 建站之星破解版下载微信服务号开发
  • 文明校园建设专题网站长沙微网站建设
  • 有网站和无网站的区别肥乡县建设局网站
  • 公司网站建设维护wordpress 柚子皮
  • 网站作品广州微信小程序开发制作公司
  • 制作网站需要注意的细节陕西建设网官网公示
  • 网站开发流程中网站制作包括WORDPRESS添加全屏幻灯片
  • 网站卖给别人后做违法信息asp无刷新网站模板
  • 怎么做cpa网站网站建设衤金手指下拉10
  • 质量好网站建设商家珠海左右创意园网站开发
  • 商城网站建设流程电子网站建设心得
  • 地方性手机平台微网站南京广告公司黄页
  • 东营城镇建设规划网站代理产品
  • 做公开网站的步骤新媒体运营工资一般多少
  • 找一家秦皇岛市做网站的公司鸿蒙开发语言
  • 网站名是什么discuz做企业网站
  • 做招工的网站排名全国城乡和住房建设厅查询网