资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 面试经验 > 面试问答

我如何操纵一个数组以得到最大的数字?

面试问答 更新时间: 发布时间: 计算机考试归档 最新发布

我如何操纵一个数组以得到最大的数字?

正如其他人指出的那样,按字典顺序排序和连接是很接近的,但并不完全正确。例如,对于数字

5
54
56
字典编排,将产生 {5,54,56}
(以递增顺序)或 {56,54,5} (以递减顺序),但是我们真正想要的是 {56,5 ,54} ,因为这会产生尽可能多的数字。

因此,我们需要两个数字的比较器,以某种方式将最大的数字放在第一位。

  1. 我们可以通过比较两个数字中的单个数字来做到这一点,但是如果另一个数字仍然有剩余数字,则在离开一个数字的结尾时必须格外小心。我们必须弄清许多计数器,算术和边缘情况。

  2. 一个更可爱的解决方案(也由@Sarp Centel提到)实现了与(1)相同的结果,但代码却少得多。这个想法是 将两个数字的级联与这些数字的反向级联 进行 比较 。我们必须在(1)中显式处理的所有杂项都是隐式处理的。

例如,比较

56
5
,我们会做的一个普通字典的比较
565
556
。由于
565
>
556
,我们将说它
56
大于
5
,并且应该排在第一位。同样,进行比较
54
5
意味着我们将测试
545
<
554
,这表明我们
5
比更大
54


这是一个简单的例子:

// C++0x: compile with g++ -std=c++0x <filename>#include <iostream>#include <string>#include <algorithm>#include <vector>int main() {  std::vector<std::string> v = {    "95", "96", "9", "54", "56", "5", "55", "556", "554", "1", "2", "3"  };  std::sort(v.begin(), v.end(),      [](const std::string &lhs, const std::string &rhs) {        // reverse the order of comparison to sort in descending order,        // otherwise we'll get the "big" numbers at the end of the vector        return rhs+lhs < lhs+rhs;      });  for (size_t i = 0; i < v.size(); ++i) {    std::cout << v[i] << ' ';  }}

运行时,此代码显示:

9 96 95 56 556 5 55 554 54 3 2 1


转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/636794.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【我如何操纵一个数组以得到最大的数字?】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2