字符串字符类型排序问题 + 青训营11.22day的学习 | 豆包MarsCode AI刷题

37 阅读3分钟

因期末考试鸽了一段时间,学校学的确实没啥用,但我的学历还是得提升一下才能够到大厂,所以选择了保研,可能也是高考的不甘心吧,被绩点困住的分奴负荆请罪。 撑住就剩半年了,我就能做我想做的事了。

Redis课程学习小结

1. Redis的必要性与工作原理

  • 为什么需要Redis

  • 高性能:基于内存存储,读写速度快

  • 降低数据库压力:作为缓存层,减少直接访问数据库的次数

  • 支持多种数据结构:String、Hash、List、Set、Sorted Set等

  • 原子性操作:保证数据一致性

  • 基本工作原理

  • 内存存储:数据存储在内存中,支持持久化

  • 单线程模型:避免了多线程的竞争问题

  • IO多路复用:高效处理并发连接

2. Redis应用案例

  • 缓存场景

  • 热点数据缓存

  • 接口数据缓存

  • 页面缓存

  • 计数器功能

  • 文章阅读量统计

  • 用户点赞数统计

  • 商品库存计数

  • 分布式锁

  • 秒杀场景

  • 并发控制

3. 字节跳动Redis使用注意事项

  • 性能优化

  • 合理设置过期时间

  • 避免大key

  • 使用批量操作提升性能

  • 数据安全

  • 做好容灾备份

  • 监控内存使用

  • 防止缓存穿透、击穿、雪崩

  • 最佳实践

  • 遵循规范的key命名

  • 合理使用数据结构

  • 做好监控和告警

总结

Redis作为一个高性能的缓存中间件,在现代互联网架构中扮演着重要角色。合理使用Redis不仅能提升系统性能,还能降低数据库压力。在实际应用中,需要注意性能优化、数据安全等问题,遵循最佳实践来确保Redis的稳定运行。

解题思路

  • 首先需要分别收集字母和数字,同时记录问号和原始位置

  • 对收集到的字母和数字分别排序(字母升序,数字降序)

  • 按照原始位置重建字符串

算法分析

1. 时间复杂度:

  • 遍历字符串:O(n)

  • 排序字母和数字:O(k log k),其中k是字母或数字的数量

  • 总体时间复杂度:O(n + k log k),其中n是字符串长度

  • 空间复杂度:

  • O(n),需要存储原始位置和排序后的结果

关键点说明

  • 字符分类处理:

  • 使用Character.isLetter()判断字母

  • 使用Character.isDigit()判断数字

  • 其他字符(问号)保持原位置

  • 排序规则:

  • 字母按字典序升序排列

  • 数字按从大到小降序排列

  • 问号位置保持不变

  • 位置记录:

  • 使用单独的列表记录字母和数字的原始位置

  • 排序后根据记录的位置重建字符串

  • 注意事项:

  • 数字转换时需要注意字符和数值的转换

  • 保持原始位置不变是关键要求

  • 需要分别处理字母、数字和问号三种情况

这个解决方案能够有效处理各种输入情况,并且保持了代码的清晰性和可维护性。