每次选择一个数放到最后,把数组调成有序需要多少次操作()
度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作:
任取数组中的一个数然后将它放置在数组的最后一个位置。
问最少操作多少次可以使得数组从小到大有序?
最开始的思路:
19
7
8
25
使用set将输入数组排序,从头遍历,从最小值开始,将当前值之前所有比现在值大的数放到最后。
19 7 8 25
【每次选择一个数放到最后,把数组调成有序需要多少次操作()】— 7 8 25 19
— 7 8 — 19 25
则共需要两次操作,由此可写得代码
#include
#include
#include
#include
using namespace std;
int main()
{
int n;
cin >> n;
deque num;
set s;
for (int i = 0;
i> temp;
num.push_back(temp);
s.insert(temp);
}
int res = 0;
for (auto iter = s.begin();
iter != s.end();
iter++)
{
int val = *iter;
set ss;
for (int i = 0;
num[i] != val;
i++)
{
if (num[i]>val)
{
ss.insert(num[i]);
num.erase(num.begin() + i);
i--;
}
}
res += ss.size();
if (ss.size()>0)
{
for (auto iter = ss.begin();
iter != ss.end();
iter++)
{
num.push_back(*iter);
}
}
}
cout << res << endl;
return 0;
}
问题:ac通过率70%
测试用例:10 11 12 1 3 4 5 6 7 8 9 2
按上述思路进行分析供需13次操作,但是正确答案10次可以得到有序序列。
1 3 4 5 6 7 8 9 2 10 11 12//3次操作
1 2 10 11 12 3 4 5 6 7 8 //7次操作
1 2 3 4 5 6 7 8 9 10 11 12 //3次操作
存在的问题:如果先把 3 4 5 7 8 9 放到最后,再把10 11 12 放到最后,则可以调节成有序。
这里正确的思路,选择第1小和第2小的数排成有序,选择第2小和第3小,。。。第n-1小第n小 排序
别人的代码::)
#include
推荐阅读
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 2019女表什么牌子好(如何挑选女士手表?)
- 怎样挑选好的冰淇淋
- 拆书方法训练营
- 一个选择排序算法
- 甄选句子5.8
- 厨房装修如何选择水槽(一个干净好用的厨房,从这里开始。)
- 既然选择了开始,便只顾一路坚持
- 记一次赛课失利