从10进制到1000进制:一场数字的盛宴

这篇具有很好参考价值的文章主要介绍了从10进制到1000进制:一场数字的盛宴。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从10进制到1000进制:一场数字的盛宴

本篇博客会讲解力扣“1920. 基于排列构建数组”的解题思路,这是题目链接。

先来审下题:
从10进制到1000进制:一场数字的盛宴
以下是输出示例:
从10进制到1000进制:一场数字的盛宴
从10进制到1000进制:一场数字的盛宴
以下是提示:
从10进制到1000进制:一场数字的盛宴
相信读完题的你已经感到没啥意思了,感觉做这道题就是在浪费时间。但是还是建议你看下去,接下来会有一个很有意思的思路。在讲解这个有意思的思路之前,先按照正常的思路实现一下:

int* buildArray(int* nums, int numsSize, int* returnSize) {
	int* ret = (int*)malloc(sizeof(int) * numsSize);
	*returnSize = numsSize;

	// 根据指定规则,构建数组
	for (int i = 0; i < numsSize; ++i)
	{
		ret[i] = nums[nums[i]];
	}

	return ret;
}

从10进制到1000进制:一场数字的盛宴

这样就过了。事实上,我更推荐这个正常的思路。不过这个思路开辟了一个新的数组,有没有什么手段,直接在原数组上操作呢?

你可能会问:怎么可能?难道我们要同时在一个数组中存储原数据和结果数据?

答案是:是的!类比一下:假设我们要存储的数据是10以内的,那么用一个十进制数就能够存的下了。比如:37就代表了2个数,一个是37%10=7,另一个是37/10=3。

而本题中的数据是1000以内的,所以可以用“1000进制”来存储。我们规定一个数n,n%1000代表原数据,而n/1000代表结果数据。那么我们就可以遍历数组,对nums[i]做如下操作:

nums[i] += 1000 * (nums[nums[i]] % 1000);

在nums[i]操作之前,nums[i]的值就是它本身,可以使用nums[nums[i]]找到其中的原数据,但是还要%1000。找到该数据后,还要存储到nums[i]中,就*1000再加到nums[i]上即可。实际拿出结果数据,只需要/1000

具体实现的代码如下:

int* buildArray(int* nums, int numsSize, int* returnSize){
    // nums[i]<1000,故采取1000进制
    // nums[i]%1000为原来数据
    // nums[i]/1000为结果数据
    for (int i = 0; i < numsSize; ++i)
    {
        nums[i] += 1000 * (nums[nums[i]] % 1000);
    }

    // 取出结果数据
    for (int i = 0; i < numsSize; ++i)
    {
        nums[i] /= 1000;
    }

    *returnSize = numsSize;
    return nums;
}

从10进制到1000进制:一场数字的盛宴
这样也能过。

总结

  1. 常规思路没什么好说的。
  2. 如果我们想把两个1000以内的数存储到一块空间中,可以使用1000进制。

感谢大家的阅读!文章来源地址https://www.toymoban.com/news/detail-441488.html

到了这里,关于从10进制到1000进制:一场数字的盛宴的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 联想小新I1000 win10电脑系统安装教程

    最近因为之前电脑太卡了,想要给自己的联想小新重装系统,发现网上说采用以下方式安装的win10系统会更干净一些,过程做以下记录。 这是我电脑的配置: 内部太小了,后期重装系统后看是否需要加内存条和固态硬盘 未重装系统前的运行情况 显示没有分区,重装系统的时

    2024年02月05日
    浏览(67)
  • STM32的C语言16进制转10进制,10进制移位转16进制

    /*********16进制转10进制*************/ u16  hextoDec(u8 hex)     {  u16 sum=0,mul=1;  int i,r;  int count=0;  do{   r=hex%16;   for(i=0;icount;i++)         mul*=16;         mul*=r;         sum+=mul;         mul=1;         count++;   }while(hex/=16);  return sum; } int main { u16 num; u16 buf[2]; num=  hextoDec

    2023年04月26日
    浏览(37)
  • 肉眼无法读懂是二进制独有的浪漫——一篇博客学懂文件操作(C语言)

    目录 一、为什么使用文件 二、什么是文件 2.1程序文件 2.2数据文件 2.3文本文件和二进制文件 2.4文件名 三、文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 3.3文件的顺序读写函数 3.3.1流的概念 3.3.2输入输出的概念  3.3.3函数操作 3.4文件的随机读写函数 3.4.1fseek 3.4.2 fte

    2024年02月06日
    浏览(45)
  • 单篇笔记涨粉8w,10秒视频播放超1000w,小红书最近在流行什么?

    为洞察小红书平台的内容创作趋势及品牌营销策略,新红推出4月月度榜单,从创作者及品牌两方面入手,解析月榜数据,为从业者提供参考。 98w+用户点赞锦鲤 真诚的祝福是必杀技 据4月的 『创作人气榜』 TOP30数据显示,占比最高的3个创作类型仍是 影视综、资讯、生活类

    2024年02月03日
    浏览(38)
  • 【数据结构-进制转换】用栈实现10进制数转任意进制数

    用栈实现10进制数转任意进制数代码实现 主要思想 :一个十进制数转成相应进制,是通过自身除于对应进制得余数,直到商为0.将所有余数逆序(即最先得到的余数放最后面)排列,得到的结果为所得相应进制数。这一特性与栈极其类似,栈也是 先进后出 原则,故用栈更为

    2023年04月08日
    浏览(42)
  • Python实现16进制转10进制算法及源码

    Python实现16进制转10进制算法及源码 16进制是一种常用的数学计数方式,而在Python中将16进制数据转换为10进制数据是非常简单和快捷的。下面我将展示如何使用Python实现16进制转10进制的算法,并提供完整的代码实现。 首先,在Python中可以通过使用int()函数将16进制字符串转换

    2024年02月11日
    浏览(40)
  • 数字电路13-任意进制计数器设计

    因为市面上的进制计数器的种类优先,所以需要特定进制时,只能自己在已有产品的基础上构成需要的特定进制。 十进制计数器也是通过4位二进制计数器,去掉多余状态所得 根据十进制计数器,可得M进制计数器的特点,即状态数、脉冲数、末状态 如前面的十进制计数器,

    2024年02月07日
    浏览(60)
  • 用栈的思想实现将一个十进制数字转换为八进制--数据结构

    魔王的介绍:😶‍🌫️一名双非本科大一小白。 魔王的目标:🤯努力赶上周围卷王的脚步。 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍🔥大魔王与你分享:“并不是你喝了一瓶雪花,就有人愿意陪你勇闯天涯。” 学完栈的思想后,我们知道了栈只能从栈顶进出,如果

    2023年04月24日
    浏览(43)
  • 【十进制 转 二进制】【二进制 转 十进制】10进制 VS 2进制【清华大学考研机试题】

    原题链接 本题我们先需要知道 十进制 如何转 二进制 二进制 如何转 十进制 十进制 如何转 二进制: 十进制转成二进制 例如 173 转成 二进制 就把173 短除法 除到0 然后 得到的余数, 从下往上写 二进制 转成 十进制 利用如图方法,把二进制 转成 十进制 本题是高精度,如何

    2023年04月26日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包