golang 数组组合成最小的整数_整数数组拼成一个最小或最大的数
其实这道题的本质是一个排序问题.不管求最大还是最小, 我们都可以使用排序算法解决. 普通排序是升序还是降序,主要看交互比较代码,这里求最小值相当于一个升级, 求最大值相当于一个降序.
这道题的特殊就在于求数组所有数字组成在一起最小值.如12和9, 直接观察就能看出129比912要小, 所以我们排序可以抽象为m与n两个数据,相当于mn与nm相比.再结合使用快速排序或冒泡排序都可以啦. 关键在于这个比较函数的操作.
golang 语言实现
核心: 比较函数代码
//核心函数
// 如 9, 12. 我们需要做912与129的比较, 显然912>129
//如果ab < ba 的话则返回true,否则返回false
func cmp(a, b int) bool {
if a == b {
return false
}
sa := strconv.Itoa(a)
sb := strconv.Itoa(b)
sa2 := sa + sb
sb2 := sb + sa
ma, err := strconv.Atoi(sa2)
if err != nil {
log.Fatal("a params transfer failed")
return false
}
nb, err := strconv.Atoi(sb2)
if err != nil {
log.Fatal("b params transfer failed")
return false
}
fmt.Printf("m:%d,n:%d\n", ma,nb)
if ma > nb { //相当于mn > nm 将最小的元素置换到最前面.如果是小于则最大元素置换到最前面.
return true
}
return false
}
介绍三种方法实现.
1.sort.Slice
时间复杂度:O(Nlogn)
//利用系统自带排序函数
func MinNumberBySort(numbers []int) string {
if len(numbers) == 0 {
return ""
}
sort.Slice(numbers, func(i, j int) bool {
return !cmp(numbers[i], numbers[j])
})
build := strings.Builder{}
for _, v := range numbers {
build.WriteString(strconv.Itoa(v))
}
return build.String()
}
2. 冒泡方法
时间复杂度O(n^2)
//冒泡方法, 时间复杂度O(n^2)
func PrintMinNumberByBubbling(numbers []int) string {
length := len(numbers)
for i := 0; i < length; i ++ {
for j := 0; j < length-1-i; j++ {
if cmp(numbers[j], numbers[j+1]) {
numbers[j], numbers[j+1] = numbers[j+1], numbers[j]
}
}
}
build := strings.Builder{}
for _, v := range numbers {
build.WriteString(strconv.Itoa(v))
}
return build.String()
}
3.快速排序
//快排实现
func MinNumbersByQuickSort(numbers []int) string {
qSort(numbers, 0, len(numbers)-1)
build := strings.Builder{}
for _, v := range numbers {
build.WriteString(strconv.Itoa(v))
}
return build.String()
}
//快排
func qSort(arr []int, left, right int) {
i, j := left, right
pivot := arr[left]
for left < right {
for left < right && cmp(arr[right], pivot) {//比较大小, 大于中间值的不移动,反之移动.
right --
}
arr[left] = arr[right]
for left < right && cmp(pivot, arr[left]) {//比较大小, 小于中间值的不移动.反之移动
left ++
}
arr[right] = arr[left]
}
arr[left] = pivot
if left - i > 1 {
qSort(arr, i, left-1)
}
if j - left > 1 {
qSort(arr, left+1, j)
}
}
测试用例
func TestPrintMinNumber(t *testing.T) {
src.Asset(1, t, "10211516279", PrintMinNumberByBubbling([]int {16,27,15,9,102, 1}))
src.Asset(2, t, "1516279", PrintMinNumberByBubbling([]int{16,15,27,9}))
}
func TestMinNumber(t *testing.T) {
src.Asset(1, t, "10211516279", MinNumberBySort([]int {16,27,15,9,102, 1}))
src.Asset(2, t, "1516279", MinNumberBySort([]int{16,15,27,9}))
}
func TestMinNumbersByQuickSort(t *testing.T) {
src.Asset(1, t, "10211516279", MinNumbersByQuickSort([]int {16,27,15,9,102, 1}))
src.Asset(2, t, "1516279", MinNumbersByQuickSort([]int{16,15,27,9}))
}
golang 数组组合成最小的整数_整数数组拼成一个最小或最大的数相关推荐
- golang 数组组合成最小的整数_golang数组-----寻找数组中缺失的整数方法
问题:由n-1个整数组成的未排序数组,元素都是1~n的不同整数,找出其中缺失的整数 方法一: 思路:是原数组的和 减去 丢失元素后的数组的和,就得到丢失的元素了 代码如下: package main ...
- golang 数组组合成最小的整数_Redis之整数集合底层实现
1.整数集合简述 整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现.例如当我们创建只包含五个元素的集合键,并且集 ...
- 两个数组合成一个json对象_两个jsonarray合并
技术文档 主体内容:可以认为是页面最想表达的内容总和.对于内容详情页来说,主体内容指从标题开始至正文内容结束,翻页区域也被视为主体内容,文章后的评论.分享.推荐等不视为主体内容. 首屏:用户点击搜索结 ...
- 最小采样频率计算公式_离散系统、Z变换和最小拍控制的理解与总结
离散系统.Z变换和最小拍控制的理解与总结 先注:离散系统用差分方程来表达,频域变换为Z变换 连续系统用微分方程来表达,频域变换为s变换 从采样信号说起: 如图所示: 在数学即为:采样信号(脉冲采样)的 ...
- 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j...
//整数数组的定义,然后输入一个整数x,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j: //如果X在该阵列,返回位置的阵列中的数. 资源: #include<iostr ...
- golang 数组 最后一个_面试必问:Golang高阶Golang协程实现原理
1 01 引言 实现并发编程有进程,线程,IO多路复用的方式.(并发和并行我们这里不区分,如果CPU是多核的,可能在多个核同时进行,我们叫并行,如果是单核,需要排队切换,我们叫并发). 1.1 进程和 ...
- 7-88 组合成最小的三位数
7-88 组合成最小的三位数 输入一个三位数的正整数,将数字位置重新排列,组成一个尽可小的三位数. 输入格式: 输入一个三位的正整数. 输出格式: 输出组合之后最小的三位值正整数. 输入样例: 315 ...
- java把二维转换为一维_在R语言中什么函数可以将二维数组转换成一维数组
满意答案 vi31892i 2013.09.11 采纳率:44% 等级:11 已帮助:6956人 这好象是汇编语言的问题吧 举个例子吧 #include "iostream.h&quo ...
- python画父子关系图_将有父子关系的一维数组转换成树形结构(多维)数据
先来个函数注释 : /** * 将有父子关系的一维数组转换成树形结构(多维)数据 * console.log(JSON.stringify(setTreeData(data), null, 2)); ...
最新文章
- 谈谈离散卷积和卷积神经网络
- ic卡复制软件_使用MCT复制IC卡0扇区的方法(适用于NFC手机复制或模拟门禁卡)...
- kademlia java_分布式哈希表原理与实现(Python版和Java版)
- 前端学习(1925)vue之电商管理系统电商系统之通过一层for循环渲染
- 颜宁:批评一下当年的「颜宁同学」
- java dvr_java实现海康NVR/DVR设备工作状态获取
- 引入jQuery的src设置
- python `__hash__`
- asp代码在dwearwear转换成html格式怎么转,为前端而生的编辑器Brackets及配置推荐
- matlab 字符查找函数,matlab字符函数
- 二、17【FPGA】无源蜂鸣器驱动实验
- KubeCon上海“行业客户云原生最佳实践日“成功举办,云原生在各行业落地生花...
- 应届毕业生怎么找java工作,应届毕业生怎么能找到高薪工作?
- python mysql插入数据报错:TypeError: %d format: a number is required, not str
- 忆龙2009:梦幻魔方V1.2.1.1正式发布
- 车载激光扫描系统介绍
- Cheat Engine安装 汉化
- 关于fi dd ler 手机抓包 网卡地址地址_超详细的网络抓包神器 tcpdump 使用指南
- linux环境MySQL8.0安装
- 巴菲特抄底台积电,透露出哪些信号?
热门文章
- 机械硬盘(HDD)与固态硬盘(SSD)
- 数字时代:DevOps工程师的必备技能清单
- 服务器怎么买,腾讯云服务器购买三种流程介绍
- pandas中merge函数的用法
- win10下注册MSCOMM32控件
- python 使用 io.BytesIO 内存文件加速图片生成服务
- 千亿美妆市场“野蛮生长”,悦瞳靠“假睫毛”能否“翘”动市场?
- C语言在一个数组中查找一个数字
- DCM4CHEE-ARC-LIGHT
- 最新Android 黄油刀(Butterknife)的简单使用