n位数,去除m位,获得最大的值

/*这道题是2017年某游戏公司测试开发工程师笔试的题目,当是在考场上并没有做出来。特意在网上找到了相应的解答,在这里记录下;n位整数,去除m位后,返回的最大值:贪心算法:每一次寻找局部最优,最后达到全局最优思路:1.首先要明白,在一串数中,我们如果要去掉之中n位后还剩下m位,那么剩余的最大数的最高位的位置就不可能在倒数的第m-1位到最后一位里面,不然就凑不齐m
摘要由CSDN通过智能技术生成

/*

这道题是2017年某游戏公司测试开发工程师笔试的题目,当是在考场上并没有做出来。

特意在网上找到了相应的解答,在这里记录下;

n位整数,去除m位后,返回的最大值:
贪心算法:每一次寻找局部最优,最后达到全局最优


思路:
1.首先要明白,在一串数中,我们如果要去掉之中n位后还剩下m位,那么剩余的最大数
的最高位的位置就不可能在倒数的第m-1位到最后一位里面,不然就凑不齐m位整数,与
题意矛盾;
2.按这个思路,我们寻找剩余m位中的某一位时,都像第一步那样单独考虑,并且,寻找的
位置不再是从0开始,而是上一次找到最大值的下一个位置开始寻找;
3.题目要求顺序输出,一种方案是找到了就直接输出,另一种方案用临时数组做标记
*/


#include<iostream>
#include<string>


using namespace std;


int main()
{
char arr[100];
int m, i, j, max = 0, maxj = -1;
cin >> m;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,根据您的问题,我会提供一个 Python 函数来解决这个问题。 需要注意的是,这个函数假设所有的输入数组都是整数数组,因为在这个问题中与零重复的数字是指为零的元素。另外,需要注意的是,这个函数的时间复杂度是 $O(NM)$,其中 $N$ 是输入的数组的总长度,$M$ 是所有不同元素的个数。 下面是这个函数的 Python 代码实现: ```python def find_unique_digits(arrays, n): # Merge all arrays and remove duplicates merged = list(set([x for arr in arrays for x in arr])) # Filter out zeros non_zero = [x for x in merged if x != 0] # Initialize result array result = [] # Generate all n-digit combinations for i in range(len(non_zero)): if n == 1: result.append([non_zero[i]]) else: for j in range(i+1, len(non_zero)): if n == 2: result.append([non_zero[i], non_zero[j]]) else: for k in range(j+1, len(non_zero)): result.append([non_zero[i], non_zero[j], non_zero[k]]) return result ``` 这个函数的工作原理与之前提到的一样。首先,我们将所有的数组合并成一个大数组,并去除其中的重复元素。然后,我们过滤掉为零的元素。接下来,我们使用三层循环来生成所有可能的n位数组合。最后,我们将结果数组返回即可。 例如,如果我们有以下输入数组: ```python arrays = [[1, 2, 3], [4, 5], [0, 2, 6, 7]] n = 3 ``` 运行这个函数,输出结果应该是: ``` [[1, 2, 4], [1, 2, 5], [1, 2, 6], [1, 2, 7], [1, 3, 4], [1, 3, 5], [1, 3, 6], [1, 3, 7], [2, 4, 5], [2, 4, 6], [2, 4, 7], [2, 5, 6], [2, 5, 7], [2, 6, 7], [3, 4, 5], [3, 4, 6], [3, 4, 7], [3, 5, 6], [3, 5, 7], [3, 6, 7]] ``` 这是一个包含了所有不重复数字的三位数组合的列表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值