排列数组中数字得出最大数算法

今日见一有意思的算法题目:“编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。”

最简单的是爆力破解,数组全排列,最后拼出来的数取最大的。然而没有啥技术含量,于是摒弃。

接下来分析,另外一种实现方法,

分析:为了要得到最大值,那么要从每个数的最高位比较,取最高的(比如第一个数字是9的)放在拼接数字最前面。最完9的,就看有没有8的,依次类推。这是第一步。

第二个问题是,如果有多个数字最高位都是9,怎么办呢?显然,比较它们的第二位,谁数字大谁在最前面。

这里又有一个特殊情况,比如最高位都是7的三个数(7,75,78),这时怎么处理呢?很显然,这三个数拼起来拼得最大值是78775。看见没,10以内的数字放的位置比较特殊。这是因为78,75后面的数字分别是8和5, 一个比7大,一个比7小。所以数字7就放在了78和75中间才会使拼起来的数最大。


实现代码如下:

import java.util.Arrays;
import java.util.Comparator;
/**
 * Problem Description:
 * 	编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。
 * 
 * This is a solution for this problem.
 * 
 * @au
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是 Python 代码实现: ```python nums = input("请输入一组数,以空格分隔:").split() # 输入一组数,以空格分隔 nums = [float(num) for num in nums] # 将输入的字符串转换为浮点数列表 # 对列表进行升序排列 nums_sorted = sorted(nums) # 输出最大值和平均值 print("最大值:", nums_sorted[-1]) print("平均值:", sum(nums_sorted) / len(nums_sorted)) # 输出超出平均值的数 avg = sum(nums_sorted) / len(nums_sorted) above_avg = [num for num in nums_sorted if num > avg] print("超过平均值的数:", above_avg) ``` 示例输入: ``` 请输入一组数,以空格分隔:3 1 4 1.5 2.6 ``` 示例输出: ``` 最大值: 4.0 平均值: 2.42 超过平均值的数: [3.0, 4.0, 2.6] ``` ### 回答2: 首先,我们可以通过一些排序算法将输入的一组数按从小到大的顺序进行排序。常见的排序算法有冒泡排序、插入排序、选择排序、快速排序等等。以下是使用快速排序算法对一组数进行排序的步骤: 1. 假设输入的一组数为nums,长度为n。 2. 将nums的第一个数作为基准pivot。 3. 从nums的第二个数开始,分别与pivot进行比较,如果比pivot小,则将其放到pivot的左边;如果比pivot大,则将其放到pivot的右边。这样,一轮循环后,pivot左边的数都比pivot小,右边的数都比pivot大。 4. 将pivot左边和右边的子数组分别递归调用快速排序算法,进行排序。 5. 递归结束的条件是子数组的长度小于等于1。 经过快速排序算法的处理,我们可以得到一组按从小到大排列的数。接下来,我们可以根据排序后的结果来计算最大值、平均值和超出平均值的数。 最大值:排序后数列的最后一个数即为最大值。 平均值:将所有数求和后除以数的个数。 超出平均值的数:遍历排序后的数列,将大于平均值的数输出即可。 以上是基于输入的一组数进行升序排列的方法,并得出最大值、平均值以及超出平均值的数。 ### 回答3: 首先,对于输入的一组数,我们可以使用任何一种排序算法将其按照从小到大的顺序进行升序排列。这里我们以冒泡排序算法为例进行解释。 冒泡排序的基本思想是重复地对相邻的两个数字进行比较,如果顺序不符合要求则交换它们,直到整个序列都排好序为止。具体步骤如下: 1. 首先,读入一组数,将其保存到一个数组中。 2. 使用冒泡排序算法数组进行升序排序。 3. 记录排序后的数组中最大的数,即为最大值。 4. 计算排序数组中所有数的平均值。 5. 找出大于平均值的那些数,保存到另一个数组中。 最后,输出结果: - 最大的数为:最大值。 - 平均值为:平均值。 - 超出平均值的数为:超出平均值的数。 以下是一个具体的示例代码: ```python def bubbleSort(arr): n = len(arr) for i in range(n-1): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] def main(): nums = input("请输入一组数,以空格分隔:").split() nums = [int(x) for x in nums] bubbleSort(nums) max_num = nums[-1] average = sum(nums) / len(nums) above_average = [] for num in nums: if num > average: above_average.append(num) print("最大的数为:", max_num) print("平均值为:", average) print("超过平均值的数为:", above_average) main() ``` 当你运行该程序并输入一组数后,它将会输出最大的数、平均值和超过平均值的数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值