【数学/数组】的【排序/转换】问题,高分求最佳算法

shdfl shdfl 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
  
一个巨型字符型数组(赋值长度为8字节),赋值规律为:
从 00000000 开始,按自然数递增,直至 99999999

如果将每个值的按0-9的【升序】的顺序重新排序,将会分别得到它们的1个【新值】

比如:
 原值   -->  新值
"00001234" --> "00001234"
"00012340" --> "00001234"
"00123400" --> "00001234"
"01234000" --> "00001234"
"12340000" --> "00001234"
"23400001" --> "00001234"
"34000012" --> "00001234"
"40000123" --> "00001234"

很显然,当所有的【原值】经过排序转换后,有N多的【新值】都是完全相同的


--------------------------------------------
需要解决的问题有两个,求它们的最佳算法

【问题1】
求这个巨型数组的所有【不同新值】的个数(及具体算法)
如果在排序的过程中,只保留最新出现的某个【新值】(也是字符型,长度8字节)
之后出现的与它完全相同的【新值】则全部过滤掉
也就是说,从 00000000 --> 99999999,一共存在多少个不同的【新值】


【问题2】
假定所有【不同新值】的个数是N个,N其实就是【问题1】的答案
然后将这【N个新值】按【从小到大】的顺序进行排序
这样每个【新值】都会得到1个【编号X】

那么,
如何将 00000000 --> 99999999 每个排序出来的【新值】
用其对应的【编号X】进行标记?

比如:已经存在某个库,库的记录数就是99999999+1条(00000000 --> 99999999)
如何将这个库里每条记录的【“新值编号”字段】的内容,更新为【编号X】

或者,对于数组里的任何1个【原值】,比如 “56892226”
它的【新值】就是 “22256689”
如何得到 “22256689” 的【编号X】


--------------------------------------------
我的水平实在很菜,对于【问题2】,只想到了循环替换
但因为数组记录数巨大,效率实在太低了

有请高手赐教高效算法


--------------------------------------------
另:提问时【给分框】的上限只有100分,如何给更多分?

  
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
shdfl
ASP 28,401 成员 356,940 内容