将数组重新排序以构造最小值

给定一个整数数组,请将其重新排序,以构造最小值。

注意事项

The result may be very large, so you need to return a string instead of an integer.

样例

给定 [3, 32, 321],通过将数组重新排序,可构造 6 个可能性数字:

3+32+321=332321

3+321+32=332132

32+3+321=323321

32+321+3=323213

321+3+32=321332

321+32+3=321323

其中,最小值为 321323,所以,将数组重新排序后,该数组变为 [321, 32, 3]。

挑战

在原数组上完成,不使用额外空间。

标签

数组

code

class Solution {
public:
/**
* @param nums n non-negative integer array
* @return a string
*/ void transferToString(string &result,int number){
if(number<10) {
result+=('0'+number);
return;
}
int temp=number;
transferToString(result,number/10);
result+=('0'+temp);
} bool compare(int num1,int num2){
string com1,com2; if(num1==0)
com1+=('0'+num1); while(num1) {
com1+=('0'+num1);
num1/=10;
}
if(num2==0)
com2+=('0'+num2); while(num2) {
com2+=('0'+num2);
num2/=10;
} int len1=com1.size(),len2=com2.size(); int i,j;
for(i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--) {
if(com1[i]>com2[j])
return true;
else if(com1[i]<com2[j])
return false;
}
if(i==-1&&j==-1)
return false;
if(i==-1) {
while(j>=0) {
if(com2[j]<com2[j+1])
return true;
else if(com2[j]>com2[j+1])
return false;
else
j--;
}
return false;
}
else {
while(i>=0) {
if(com1[i]<com1[i+1])
return false;
else if(com2[i]>com2[i+1])
return true;
else
i--;
}
return false;
}
} string minNumber(vector<int>& nums) {
// Write your code here
string result;
if(nums.empty())
return result;
int n=nums.size();
int i;
for(i=0;i<n;i++) {
for(int j=0;j<n-i-1;j++) {
if(compare(nums[j],nums[j+1])) {
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
} }
for(i=0;i<nums.size();i++) {
if(result.empty()&&nums[i]==0)
continue;
else
transferToString(result,nums[i]);
}
if(result.empty())
result+='0';
return result;
}
};

LintCode-379.将数组重新排序以构造最小值的更多相关文章

  1. LintCode2016年8月22日算法比赛----将数组重新排序以构造最小值

    将数组重新排序以构造最小值 题目描述 给定一个整数数组,请将其重新排序,以构造最小值. 样例 给定[3,32,321],通过将数组重新排序,可构造6个可能性的数字: 3+32+321=332321 3 ...

  2. 给定数组a[N]构造数组b[N]

    转自:http://blog.csdn.net/wumuzi520/article/details/7841280 给定一个数组a[N],我们希望构造数组b [N], 其中b[j]=a[0]*a[1] ...

  3. js中关于一个数组中最大、最小值以及它们的下标的输出的一种解决办法

    今天在学习js中的数组时,遇到的输出一个数组中最大.最小值以及它们的下表,以下是自己的解决方法! <script type="text/javascript"> var ...

  4. Javascript获取数组中最大和最小值

    取出数组中最大值或最小值是开发中常见的需求,今天继续讲解如何获取javascript数组中最大和最小值. 1.排序法 首先我们给数组进行排序,可以按照从小到大的顺序来排,排序之后的数组中第一个和最后一 ...

  5. JavaScript学习:取数组中最大值和最小值

    在实际业务中有的时候要取出数组中的最大值或最小值.但在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最 ...

  6. Java-Runoob-高级教程-实例-数组:06. Java 实例 – 数组获取最大和最小值

    ylbtech-Java-Runoob-高级教程-实例-数组:06. Java 实例 – 数组获取最大和最小值 1.返回顶部 1. Java 实例 - 数组获取最大和最小值  Java 实例 以下实例 ...

  7. 使用JavaScript·求数组的最大值和最小值

    前言  在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法.   法一:其实利用 ...

  8. js获取数组中的最大值/最小值

    目录 前言 1. 使用Math的静态方法max/min 1.1 结合ES6的扩展运算符...使用 1.2 结合apply/call方法来使用 1.3 结合reduce来使用 2. 排序获取 2.1 只 ...

  9. C语言:对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。

    //对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. #include <stdio.h& ...

随机推荐

  1. Hadoop核心架构(1)

    在大数据的发展过程中,出现了一批专门应用与大数据的处理分析工具,如Hadoop,Hbase,Hive,Spark等,我们先从最基础的Hadoop开始进行介绍 Hadoop是apache基金会下所开发的 ...

  2. java中子类会继承父类的构造方法吗?

    参考: https://blog.csdn.net/wangyl_gain/article/details/49366505

  3. HMM笔记

    参考资料: 1.https://www.bilibili.com/video/av24132174/?p=4 2.<数学之美>-吴军 3.<统计学习方法>-李航 HMM(Hid ...

  4. VIM 键

    输入 vimtutor命令,可以打开Linux使用手册(基本使用). ***. 插入键: A: 行尾插入 a: 字符后面插入 i: 字符前面插入 I: 行首插入 r:只替换一次字符  R:一直替换,直 ...

  5. (cmath)关于头文件cmath

    关于头文件cmath // -*- C++ -*- C forwarding header. // Copyright (C) 1997-2014 Free Software Foundation, ...

  6. python--复习之路的目录

    想要看时点链接看看,常来复习,温故而知新,可以为师矣. 1:基本类型 python--基本类型之字符串 python--基本类型之列表 python--基本类型之元组 python--基本类型之集合 ...

  7. Scratch入门课程(1)——把工具准备好

    为了让更多的同学了解少儿编程,从今天开始,我将以每周1次的频率发布Scratch的入门课程,大约在30课时左右. 几点情况说明: 1.这批课程主要面向2-4年级的同学,难度都不大,按照教程可以很轻松地 ...

  8. 北京Uber优步司机奖励政策(2月20日~2月21日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. LeetCode: 29. Divide Two Integers (Medium)

    1. 原题链接 https://leetcode.com/problems/divide-two-integers/description/ 2. 题目要求 给出被除数dividend和除数divis ...

  10. spring源码-BeanFactoryPostProcessor-3.2

    一.BeanFactoryPostProcessor这个是spring容器的拓展之一,其目的是在容器初始化完成之前,通过beanFactory对上下文进行进行操作. 二.常用场景,需要对beanDef ...