从10进制到1000进制:一场数字的盛宴
本篇博客会讲解力扣“1920. 基于排列构建数组”的解题思路,这是题目链接。
先来审下题:
以下是输出示例:
以下是提示:
相信读完题的你已经感到没啥意思了,感觉做这道题就是在浪费时间。但是还是建议你看下去,接下来会有一个很有意思的思路。在讲解这个有意思的思路之前,先按照正常的思路实现一下:
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以内的,那么用一个十进制数就能够存的下了。比如: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;
}
这样也能过。
总结
- 常规思路没什么好说的。
- 如果我们想把两个1000以内的数存储到一块空间中,可以使用1000进制。
感谢大家的阅读!
从10进制到1000进制:一场数字的盛宴相关推荐
- 蓝桥杯基础之16进制、10进制、8进制、2进制换算总结
常用函数的一些小总结 string to int(字符串转到int类型) #include<sstream> //重要的库 #include<iostream> #includ ...
- 【十进制 转 二进制】【二进制 转 十进制】10进制 VS 2进制【清华大学考研机试题】
10进制 VS 2进制 十进制转成二进制 二进制 转成 十进制 本题是高精度,如何做? 原题链接 本题我们先需要知道 十进制 如何转 二进制 二进制 如何转 十进制 十进制 如何转 二进制: 十进制转 ...
- 【python】用python进行进制转换(10进制、2进制、16进制)
进制转换 ① 16进制转10进制 ② 16进制转2进制 ③ 10进制转16进制 ④ 10进制转2进制 ⑤ 2进制转16进制 ⑥ 2进制转10进制 博客由来写在前面:由于计组老师要求我们课后查一下进制转 ...
- POJ3353 1000进制大整数|水题|题意揣摩
poj.org/problem?id=3353 这道题,10%的AC率,看着有点害怕 Total Submissions: 593 Accepted: 54 但是题目读起来并不能难,只是简单得类似罗马 ...
- 1952 Problem F 10进制 VS 2进制
问题 F: 10进制 VS 2进制 时间限制: 1 Sec 内存限制: 32 MB 献花: 27 解决: 18 [献花][花圈][TK题库] 题目描述 对于一个十进制数A,将A转换为二进制数,然后按位 ...
- 16进制转8进制 两种方法先转二进制在转8进制或先转10进制在转8进制
问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由09.大写字母AF组成的字符串,表示要转换的 ...
- 10进制和64进制互转
以前写过16进制和64进制的转换函数,今天做下载页的短连接,突然想到可以吧id转换为64进制,让地址看起来更短,下面是代码,分享给大家.性能测试,1000次计算互转计算,4位64进制数(aaaa:26 ...
- 题目1208:10进制 VS 2进制(进制转换以及大数保存问题)
题目链接:http://ac.jobdu.com/problem.php?pid=1208 详细链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- leetcode 168. Excel表列名称(10进制转26进制)
题目 思路 10进制转26进制 经过分析,我们不难发现,这是一个26进制和十进制相互转换的问题.序列A-Z依次对应序列1-26.进制转换的基本办法就是"取余法",换算规则如下: A ...
最新文章
- 这里天刚黑,而家里都已经后半夜了
- java无参试题_JavaEE基础面试题0
- 实现类似Android联系人搜索功能
- RocketMQ 4.5.1 环境搭建
- LinkedList的实现原理
- apt get php mysql_Ubuntu10用apt-get配置apache+php+mysql(轉)
- apollo源码分析 感知_Scikit-Learn 源码研读 (第一期)项目结构介绍
- Ribbon和Feign的对比-带简易例子
- 网页设计与制作项目教程HTML+CSS+JavaScript之项目三 flower shop
- 无人机运动规划4:ego-swarm无人机群运动规划
- 【4月比赛合集】19场可报名的「创新应用」和「程序设计」大奖赛,任君挑选!
- android高仿微信拍摄,Android 仿微信视频拍摄 支持触摸拍摄 长按拍摄
- AD21调整PCB大小操作步骤!
- 存储性能指标--iops
- 有道云笔记4年的用户体验
- Android Studio Canvas 实现鼠标贝塞尔曲线拖尾特效(富文本编辑器)
- 下列对C语言特点的描述中 错误的是,下列对C语言特点的描述中,错误的是。
- sqlmap使用图解
- 基恩士MC协议 虚拟服务器,C#读写基恩士PLC 使用TCP/IP 协议 MC协议
- 经验:几个985/211/普通院校的本科生/研究生高薪大数据学习全程记录,笔记心得,求职面试
热门文章
- 04证券市场典型违法违规行为及法律责任
- u盘文件损坏怎么恢复数据?好用的数据恢复软件
- SAP 过账显示不在允许过账期间 消息号M7053
- rcnn 回归_基础目标检测算法介绍:CNN、RCNN、Fast RCNN和Faster RCNN
- Magix发布Samplitude Pro X7
- 2分钟教你学会一键JS解密
- Unity编辑器拓展(Gizmos)
- 计算机地质绘图实验报告,计算机地质绘图实习报告作业二.doc
- Ubuntu服务器找不到网卡
- 【读点论文】Fawkes: Protecting Privacy against Unauthorized Deep Learning Models 添加像素扰动来实现图片的对抗AI识别