前言
今天这题比较有意思,排序算法还是比较有用的,显然选择排序在这里很容易实现。
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目描述
题目描述:
小明手头上有n个问题,每个问题都有一个数值,表示这个问题的难度;正好小明团队有n个人,每个人都有一个数值,表示这个人的能力 现在小明要把这n个问题分配给每个人,要求能力更高的人分配到更高难度的问题
输入描述:
第1行包含一个数字 n (n <= 100000),表示小明手头上有n个问题,团队有n个人 第2行到第n+1行,每一行包含1个数字,表示n个问题的难度(正整数,小于10^9) 第n+2到2n+1行,每一行包含一个数字,表示团队n个人的能力值(正整数,小于10^9)
输出描述:
输出n行,按输入的顺序,输出每个人分配到的问题的难度,如果有两个人能力值相同,那么输入的顺序靠前,分配到更高难度的问题
示例:
输入
3
1
2
3
3
2
1
输出
3
2
1
二、解题
1.分析
选择排序的总体思路就是:每一次遍历选择一个最大或最小的元素,把它放到正确的位置上,所以选择排序的时间复杂度基本上是n^2。在本题中因为要同时遍历二个数组,时间复杂度会更高。
因不是按从小到大或从大到小排列。而是按能力值排序,所以需要稍做变通,新建一个数组,将每次循环得到的最大值(按题目要求)放到对应最大能力的位置。
又因输出要求string,最后转vector的时候需要转换一次。
2.代码并注释
代码如下:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
vector<string> solution(int n, vector<int>& arr1, vector<int>& arr2){
vector<string> result;
// TODO:
//定义最大能力,最大工作,最大能力的index,最大工作的index,t是循环计数
int max_ab=0, max_wo=0, max_ab_id=0, max_wo_id=0, t=0;
int arr[n]; //新建一个组数用来存放排序结果
while(t<n){
for (int i=0; i<n; ++i){
if (arr2[i]>max_ab){ //找出最大能力,及它的index
max_ab = arr2[i];
max_ab_id = i;
}
if (arr1[i]>max_wo){ //找出最大工作,及它的index
max_wo = arr1[i];
max_wo_id = i;
}
}
arr2[max_ab_id] = 0; //将最大能力置0
arr1[max_wo_id] = 0; //将最大工作置0
arr[max_ab_id]=max_wo; //在新数组里对应index中放入最大工作
t++;
max_ab=0, max_wo=0, max_ab_id=0, max_wo_id=0; //初始值全置0
}
for (int i=0; i<n; ++i){ //将结果倒入result
string tmp = to_string(arr[i]);
result.push_back(tmp);
}
return result;
}
还是要吐槽一下,CSDN这个C++编译器… 太烂了!在VScode中可以这样写:
int arr[3]={1,2,3};
string arrs[3];
for(int i=0; i<3; ++i){
arrs[i]=to_string(arr[i]);
}
vector<string> v(arrs,arrs+3);
也就是说,我可以直接把arr数组定义成string,然后一行代码倒入vector,可在这里死活报错!
搞不明白!按C++Primer的作者Stanley B.Lippman的说法,C++程序员应该有编译器的思维方式。文章来源:https://www.toymoban.com/news/detail-426343.html
总结
这题对练习掌握选择排序还是很不错的。
可惜C++这么冷门的吗?发现笔者其它乱七八糟的内容还有人看,正经写点C++的反而没人看了…阅读数几周了都还是个位数!或者改用python3来解题会不会看的人多些?
C/C++还是很好的语言,学会了以后可以说:天下就没有看着不眼熟的代码!
也可能是笔者这万金油啥都不精,写得太烂了吧。文章来源地址https://www.toymoban.com/news/detail-426343.html
到了这里,关于C++每日一练:任务分配问题(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!