题目:给定一个整数数组,要求放回最大值的组合字符串.

例如 12, 345, 6789. 返回678934512

第一印象想用动态规划,后来觉得不太合适,穷举组合:

123456789

126789345

345126789

345678912

678912345

678934512

一共有N!种组合,时间复杂度也是N!。

换一种思路,用排序,快排的话时间复杂度为nlogn,空间复杂度为n,但注意的是不应该按整形值的大小来排序

例如:554,55,5. 返回555554.

556,55,5. 返回556555.

所以在快速排序的基础上比较方法要做一些处理。

bool Comp(string A, string B)
{if(A.length == B.length)return int(A) > int(B);int i = 0;while(i<A.length&&i<B.length){if(A[i]>B[i]) return true;else if(A[i]<B[i]) return false;i++;}if(A.length>i){if(A[i]>B[0]) return true;else return false;}else{if(B[i]>A[0]) return false;else return true;}
} 

好了,我们来写快速排序函数吧,先构造一个单遍排序函数Piv

int Piv(ref Uint[] L, int low, int high)
{int p = L[low];while(low<high){while(low<high&&Comp(L[high].tostring(),p.tostring())) high --;L[low]=L[high];while(low<high&&Comp(p.tostring(), L[low].tostring())) low++;L[high]=L[low];}L[low] = p;     reutnr low;
}

在写一个递归函数来执行多遍遍历Qsort

void Qsort(ref Uint[] L, int low, int high)
{if(low < high){int p = Piv(L,low,high);Qsort(L,low,p-1);Qsort(L,p+1,high);}
}

最后一个调用Maxbuild

string Maxbuild(Uint L)
{Qsort(L,0,L.length-1);Buildstring MaxString = new Buildstring();L.each(a => Maxstring.app(a.tostring()));return MaxString;
}

题目出处:https://leetcode.com/problems/largest-number/

AC的代码

class Solution {
public:string largestNumber(vector<int> &num) {if(num.size()<1) return "0";string largestString;vector<string> numstr;for(int i=0;i<num.size();i++){string a=intToString(num[i]);numstr.push_back(a);for(int j =numstr.size()-1;j>0;j--){string aa=numstr[j-1]+numstr[j];string bb=numstr[j]+numstr[j-1];if(aa.compare(bb)<0){string b=numstr[j-1];numstr[j-1]=numstr[j];numstr[j]=b;}}}if(numstr[0]=="0")return "0";for(int i=0;i<numstr.size();i++){largestString+=numstr[i];}return largestString;}string intToString(int a){if(a<=0)return "0";string astr;while(a!=0){astr=char(a%10+'0')+astr;a/=10;}return astr;}
};

  

转载于:https://www.cnblogs.com/wuchenglong/p/5732358.html

面试算法:Maxbuild相关推荐

  1. Java常见的面试算法题:实现两个线程交替打印1到100的数

    Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...

  2. 常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可)

    常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可) 比较典型的题目,如下有: 题目一: 1.启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程 ...

  3. 力扣高频算法php_互联网公司最常见的面试算法题有哪些?

    很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试! 为什么?你在提前准备复习的时候,在网上找了半天相应题目的分析文章,但你看了就是不懂. 你在面试的时候,卡壳了,一时间忘了怎么 ...

  4. 牛客网《BAT面试算法精品课》学习笔记

    目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...

  5. 【面试锦囊】14种模式搞定面试算法编程题(1-7)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  6. 【面试锦囊】14种模式搞定面试算法编程题(8-14)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  7. 链表python笔试题目_python经典面试算法题1.4:如何对链表进行重新排序

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.4 对链表按照如下要求重新排序 [微软笔试题] 难度系数: ...

  8. 程序员面试算法_程序员的前20个搜索和排序算法面试问题

    程序员面试算法 大家好,如果您正在准备编程工作面试或正在寻找新工作,那么您知道这不是一个容易的过程. 在您职业的任何阶段,您都必须幸运地接到电话并进行第一轮面试,但是在初学者方面,当您寻找第一份工作时 ...

  9. 链表排序c++代码_[链表面试算法](一) 链表的删除-相关题型总结(6题)

    在数据结构的最高层抽象里,只有两种结构,数组和链表.这两种结构,是所有其他数据结构实现的基础.队列和栈,可以用链表和数组来实现.图,可以用邻接表和邻接矩阵来实现,其中,邻接表就是链表,邻接矩阵就是数组 ...

  10. 【笔试面试题】腾讯2013实习生面试算法题及参考答案

    总结了一下自己遇到的以及同学遇到的面试算法题,是技术二面. 有几道题给出了参考答案,还有几道没有好的思路.路过的大侠如果有好的思路请留个言交流下呗~ 1.八数码问题:3*3的格子,有1~8个数,空了一 ...

最新文章

  1. 时隔两年,EfficientNet v2来了!更快,更小,更强!
  2. python一个函数可以有参数也可以没有参数_python 传入任意多个参数(方法调用可传参或不传参)...
  3. java判断时间是不是星期五_Java判断当前日期是星期几
  4. 部署项目到阿里云服务器上遇到的问题
  5. java 线程 wait 一定要同步_Java 线程中调用wait为什么一定要在同步代码块中?
  6. 我在 GitHub 上看到了一个丧心病狂的开源项目!
  7. LeetCode-Add Binary
  8. android 照片拼接长图_我才发现,微信里面有一个功能,能将手机照片自动拼成长图...
  9. Face Alignment by 3000 FPS系列学习总结(一)
  10. 比较两张大小相同的照片的差异,返回数值
  11. python正在处理中_协程和 asyncio
  12. qmake manual=Variables
  13. 转载 openlayers 3.0 教程
  14. 统计学、统计学习和统计推断之间的关系
  15. android 隐藏鼠标光标,Android7.1下显示/隐藏鼠标
  16. AccessibilityService辅助功能的研究及实现自动抢红包功能
  17. 中英文对照的文档、分离有妙招
  18. MatlabR2018aWin 安装教程 (附文件)
  19. 遇险哪里还有空报警?求救app告诉你,有的
  20. Android Netty的使用-入门指南

热门文章

  1. Servlet第一个示例
  2. 追求代码质量: 监视圈复杂度
  3. Notepad++如何更改背景色(以保护视力色为例)
  4. Centos 7 下安装PHP7.2(与Apache搭配的安装方式)
  5. 11.02T1 几何
  6. 一名作曲专业毕业生的安全架构师之路
  7. Java:包的使用Pack
  8. 【Anychat音视频开发】相对路径与绝对路径详解
  9. MySQL 5.1.40新特性及下载
  10. 自定义windows开机声音