牛客题解 | 找ldquo;异数rdquo;

news/2025/3/5 12:15:50/文章来源:https://www.cnblogs.com/wc529065/p/18752378

题目

题目链接

解题思路

题目要求找出序列中的"异数",定义如下:

  1. 序列中包含 \(2\)\(16\) 进制的整数
  2. 如果一个数与序列中其他所有数都不相等,则称为"异数"
  3. 输入格式为"n#m",其中 \(n\) 表示进制 \((1<n<17)\)\(m\) 为该进制下的数值

解题思路:

  1. 对每个输入的数:
    • 解析进制 \(n\) 和数值 \(m\)
    • \(m\) 转换为十进制数值
  2. 使用哈希表统计每个十进制值出现的次数
  3. 输出只出现一次的数的原始表示形式

代码

#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;// 将指定进制的字符串转换为十进制数
int convertToDecimal(int base, const string& num) {int result = 0;for (char c : num) {int digit;if (c >= '0' && c <= '9') {digit = c - '0';} else {digit = c - 'A' + 10;}result = result * base + digit;}return result;
}int main() {string input;vector<pair<string, int>> numbers;unordered_map<int, int> frequency;// 读取输入直到遇到ENDwhile (cin >> input && input != "END") {// 分割进制和数值int pos = input.find('#');int base = stoi(input.substr(0, pos));string num = input.substr(pos + 1);// 转换为十进制并存储int decimal = convertToDecimal(base, num);numbers.push_back({input, decimal});frequency[decimal]++;}// 输出异数bool found = false;for (const auto& p : numbers) {if (frequency[p.second] == 1) {cout << p.first << endl;found = true;}}if (!found) {cout << "None" << endl;}return 0;
}
import java.util.*;public class Main {// 将指定进制的字符串转换为十进制数private static int convertToDecimal(int base, String num) {int result = 0;for (char c : num.toCharArray()) {int digit;if (c >= '0' && c <= '9') {digit = c - '0';} else {digit = c - 'A' + 10;}result = result * base + digit;}return result;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<String> originalInputs = new ArrayList<>();List<Integer> decimalValues = new ArrayList<>();Map<Integer, Integer> frequency = new HashMap<>();// 读取输入while (true) {String input = sc.next();if (input.equals("END")) break;// 分割进制和数值String[] parts = input.split("#");int base = Integer.parseInt(parts[0]);int decimal = convertToDecimal(base, parts[1]);originalInputs.add(input);decimalValues.add(decimal);frequency.put(decimal, frequency.getOrDefault(decimal, 0) + 1);}// 输出异数boolean found = false;for (int i = 0; i < originalInputs.size(); i++) {if (frequency.get(decimalValues.get(i)) == 1) {System.out.println(originalInputs.get(i));found = true;}}if (!found) {System.out.println("None");}}
}
def convert_to_decimal(base, num):result = 0for c in num:if c.isdigit():digit = int(c)else:digit = ord(c) - ord('A') + 10result = result * base + digitreturn result# 存储输入和转换后的值
numbers = []  # 存储原始输入和十进制值的元组
frequency = {}  # 存储十进制值的出现频率# 读取输入
while True:try:inp = input()if inp == "END":break# 分割进制和数值base, num = inp.split('#')base = int(base)# 转换为十进制decimal = convert_to_decimal(base, num)numbers.append((inp, decimal))frequency[decimal] = frequency.get(decimal, 0) + 1except EOFError:break# 输出异数
found = False
for original, decimal in numbers:if frequency[decimal] == 1:print(original)found = Trueif not found:print("None")

算法及复杂度

  • 算法:进制转换 + 哈希表统计
  • 时间复杂度:\(\mathcal{O}(NL)\) - \(N\) 是输入数的个数,\(L\) 是每个数的最大长度
  • 空间复杂度:\(\mathcal{O}(N)\) - 需要存储所有输入的原始形式和十进制值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/893960.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客题解 | 打印二维数组

牛客题库题解题目 题目链接 题解: 题目难度:中等难度 知识点:二维数组 方法一: 由于输入行列数比较少,所以可以采用遍历整个数组,找到当前数字放入的位置。然后再找下一个数字所放位置。如下表,红色数字为该数组位置行列下标和,与对应填入的数字我们可以通过三层循环,…

牛客题解 | 扑克牌四则运算

牛客题库题解题目 题目链接 题解 题目难度:中等难度 难点分析: 1.对于四个数字具有24种排列方式。比如:1 2 3 4 可以重新排列为1 3 4 2、4 3 2 1等情况。 2.两个数字之间可以插入任意符号“+” 、“-”、“*”、“/”,四个数字一共有3个符号 3.运算符具有优先级,需要先进行…

为什么重新object的finalize方法后,PhantomReference失效了

未重写Object的finalize方法public static class MyObject {}使用 PhantomReference 来监听引用是否被回收ReferenceQueue<Object> queue = new ReferenceQueue<>();MyObject object = new MyObject();PhantomReference<MyObject> phantomReference = new Ph…

牛客题解 | 平方串

牛客题库题解题目 题目链接 题解 题目难度:中等 知识点:LCS(最长公共子序列问题),动态规划 分析: 本题实际是要找出s的最长子序列,看到这个问题就应该想到利用动态规划去解决。一般是找s1、s2两个字符串中的最长子序列,那么该题中就可以遍历s,以每个字符位置作为分割点…

车身域控制器BDCU

集成化是整车降本最重要的手段,域控和线束的深度融合是提升整车集成度的关键。车身域控制器作为汽车域控制器之一,在功能集成、系统优化和技术创新方面取得了显著进展。经纬恒润自主研发的车身域控制器(BDCU),能够兼容传统BCM功能,同时集成空调算法、门控逻辑、胎压监控等…

随记-NGNIX关于反向代理8080 和 8081

​ 在\conf\nginx.conf中有一段代码这里解释是: 在这个 Nginx 配置中,8080 和 8081 是两个不同的端口,分别用于不同的用途。它们的关系如下:8080 端口 作用: Nginx 监听 8080 端口,作为前端请求的入口。 功能: 处理静态资源请求(如前端页面)。 将 /api 开头的请求转发到…

RLChina2024 | 汪军 LLM and AI Agents: A Roadmap and Vision towards AGI

本文记录此次报告的key point(个人向) llm时代的几点difficulityInference-time computation scallingOpenAI o1 利用RL来显式整合inference期间推理的step(inference-time computation) (从predicte next-token范式到RL解决问题范式)predict next token是监督学习,受限于…

若依开发微信小程序遇到的问题一

如上所述,该错误是由于Spring在创建familyMemberController时,无法满足familyMemberService的依赖注入。进一步追踪发现,wechatServiceImpl中的wechat.appId配置项未正确配置,导致依赖注入失败。 分析原因可能是配置文件缺失或错误:wechat.appId在配置文件中未定义或拼写错…

AI工具链接汇总

1、chatgpt4 https://www.chatgp4.com/gpt功能应用场景:智能文案生成:GPT网页版智能平台具备强大的自然语言处理能力,能够根据用户输入的关键词或提示,生成高质量的文章、广告文案、营销邮件等。无论是文章创作、内容编辑,还是社交媒体上的推文撰写,都能高效完成,极大地…

linux另类实现matlab编辑器的vim模式

使用matlab编程练习中,发现matlab的自带的编辑器也不错,主要是分节运行非常方便,但是没有vim模式有点难受。经过摸索,变相实现了matlab中的编辑器的vim模式。安装好linux下matlab 2024a,其他版本也无所谓,安装好vim,我的是最新版本。左边显示器垂直放置,右边显示器水平…

在Unity转微信小游戏下,如何用Worker实现多线程

1)在Unity转微信小游戏下,如何用Worker实现多线程2)Unity的jslib库和微信小游戏的game.js如何互相调用函数或者通信3)如何在Unity中实现资源的深度复制这是第422篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地…