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

【贪心 或 DFS - 面试题】小于n最大数

数组A中给定可以使用的1~9的数,返回由A数组中的元素组成的小于n(n > 0)的最大数。 例如:A = {1, 2, 4, 9},n = 2533,返回2499。

题解

贪心思路

题目很好理解,但没写对呜呜呜

#include <iostream>
#include <vector>
#include <unordered_set>using namespace std;int getMaxD(vector<int> &a, int x)
{for (auto it = a.rbegin(); it != a.rend(); it++){if (*it < x){return *it;}}return 0;
}int solve(vector<int> &a, int n)
{// 分解 nvector<int> nvec;while (n > 0){int tmp = n % 10;nvec.push_back(tmp);n = n / 10;}// 排序可以使用的数组sort(a.begin(), a.end());// 记录有哪一些数字可以用unordered_set<int> st;for (auto v : a){st.insert(v);}// 存储答案vector<int> ans(nvec.size());// 需要特判一下数组只有一个的情况if (a.size() == 1){if (nvec[nvec.size() - 1] <= a[0]){int ans = 0;for (int i = 0; i < nvec.size() - 1; i++){ans *= 10;ans += a[0];}return ans;}else{int ans = 0;for (int i = 0; i < nvec.size() - 1; i++){ans *= 10;ans += a[0];}return ans;}}// 从给定的数字n的高位开始选择数字for (int i = nvec.size() - 1; i >= 0; i--){cout << i << endl;// 除了最后一位,其他位数能找到和原来数n的位数一样的,那就优先选if (i > 0 && st.find(nvec[i]) != st.end()){ans[i] = nvec[i];continue; // 选完后直接跳过}// 如果没找到一样的数字// 那就找一个比nvec[i]小的数字// 如果找到了,那后面就不用比较了,直接选最大的数字就行// 所以直接跳出auto d = getMaxD(a, nvec[i]);if (d > 0){ans[i] = d;break;}// 如果剩余数字都比当前n的位数上要大// 开始回溯,即上一位重新选择// 上一位通过getMaxD函数选择小于当前位数的数(从给定数字中)for (i++; i < nvec.size(); i++){ans[i] = 0;cout << i << endl;// 如果有,那就直接跳出循环,剩余位数选最大值即可d = getMaxD(a, nvec[i]);if (d > 0){ans[i] = d;break;}// 如果一直回溯到第一个数字了,都没找到合适的// 那说明和原来n数字一样长的答案不存在if (i == nvec.size() - 1){cout << i << endl;ans.resize(nvec.size() - 1);cout << ans.size() << endl;}}break;}int res = 0;// cout << ans.size() << endl;for (int i = ans.size() - 1; i >= 0; i--){res *= 10;if (ans[i] > 0){res += ans[i];continue;}res += a.back();}return res;
}int main()
{auto a = vector<int>{4};int n = 23333;int res = solve(a, n);cout << res << endl;return 0;
}

DFS

后面有空再补吧。

http://www.dtcms.com/a/354821.html

相关文章:

  • 记一次雪花算法 ID 精度丢失的Bug:前端接收到的 Long 被“四舍五入”了?
  • Java HTTP 请求:Unirest 使用指南及与 HttpClient 对比
  • 数据湖与数据仓库
  • 「数据获取」25年最新安徽省路网数据安徽省路网分类数据(获取方式看绑定的资源)
  • 自动化三维测量仪工业零件自动外观三维测量-中科米堆CASAIM
  • 三维视频融合驱动视频孪生创新:智汇云舟引领数字孪生产业新范式
  • Kubernetes一EFK日志架构
  • 在 Ubuntu 24.04 上安装二进制文件(逐步指南)
  • HCIA备考知识点总结:第二章华为VRP系统知识点
  • 嵌入式学习日记(36)TCP并发服务器构建——epoll
  • leetcode算法刷题的第二十天
  • 力扣18:四数之和
  • CodeSouler v2.4.0 版本更新
  • 生成式推荐模型的长序列特征:离线存储
  • 超越文本:深入剖析多模态AI的架构原理
  • c++ 观察者模式 订阅发布架构
  • FFmpeg05:编解码实战
  • 机器学习框架下:金价近3400关口波动,AI量化模型对PCE数据的动态监测与趋势预测
  • 企业通讯软件以安全为基,搭建高效的通讯办公平台
  • RA4M2环境搭建与新建工程
  • 新手向:Python开发简易股票价格追踪器
  • Linux内核IPv4 RAW套接字深度解析:从数据包构造到可靠传输的挑战
  • Dify 和 LangChain 区别对比总结
  • 【实操教学】ArcGIS 如何进行定义坐标系
  • Python实现点云基于法向量、曲率和ISS提取特征点
  • 【GM3568JHF】FPGA+ARM异构开发板 使用指南:显示与触摸
  • 第二章:Cesium 视图控制与相机操作
  • Java集合操作:Apache Commons Collections4启示录
  • React中优雅管理CSS变量的最佳实践
  • iOS文件管理在uni-app开发中的实战应用,多工具解决