题解 | #提取不重复的整数#

提取不重复的整数

https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1

#include <algorithm>
#include <iostream>
using namespace std;

int main() {
    string n;
    cin>>n;

    reverse(n.begin(),n.end()); //将字符串 n 反转,以便从右向左处理

    bool vis[256]={false}; //布尔数组 vis,大小为 256(覆盖所有 ASCII 字符),初始值为 false。 注意初始化的方式,用大括号。
    
    for(char c:n){ //这里遍历的时候是用char类型 不使用int 
        if(!vis[c]){ //[1]
            vis[c]=true;
            cout<<c;
        }
    }
    
    return 0;
}
// 64 位输出请用 printf("%lld")

[1] 为什么要使用布尔数组 vis

  1. 记录访问状态:我们需要一个数据结构来记录哪些数字已经被处理过。布尔数组 vis 正好可以满足这个需求,因为它可以高效地记录每个数字是否已经被访问过。
  2. 快速查找和更新:布尔数组提供了常数时间复杂度 (O(1)) 的查找和更新操作,非常适合这种场景。

为什么大小是 256?

  1. ASCII 字符集:ASCII 字符集包含 128 个字符(从 0 到 127),扩展的 ASCII 字符集包含 256 个字符(从 0 到 255)。使用 256 作为数组大小可以覆盖所有可能的字符,包括标准 ASCII 和扩展 ASCII 字符。
  2. 字符到整数的映射:在 C++ 中,字符类型 char 可以隐式转换为整数类型。例如,字符 '0' 对应整数 48,字符 '1' 对应整数 49,依此类推。因此,我们可以直接使用字符作为布尔数组的索引来记录该字符是否被访问过。

如何使用字符作为索引?

  1. 隐式转换:当你在布尔数组 vis 中使用字符 c 作为索引时,C++ 会自动将字符 c 转换为其对应的 ASCII 值。例如,如果 c 是字符 '0',那么 vis[c] 实际上是 vis[48]。
  2. 示例:假设 c 是字符 '5',其 ASCII 值是 53。vis[c] 实际上是 vis[53],表示字符 '5' 是否被访问过。
全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
宇算唯航:目测实缴资本不超100W的小公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务