要让字典序最大,同时符合条件,直接将n排列逆序输出即可。
题目不难,难在想到这个点。
时间复杂度:O(N)
c++
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=n;i;--i){
cout<<i<<" ";
}
return 0;
}
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for (int i = n; i > 0; i--) {
System.out.print(i + " ");
}
scanner.close();
}
}
python
n = int(input())
for i in reversed(range(1, n + 1)):
print(i, end = ' ')
小红有一个长度为n的排列,并且他认为一个排列是漂亮的,当且仅当对于任意i∈[1,n],aai=n−ai+1成立。
同时,他又希望排列越大越好,因此想请你帮他找出所有漂亮的排列中字典序最大的那个。
注:排列,指由1~n组成的长度为n的序列,且每个数字仅出现一次。
一个正整数n(1≤n≤105),代表排列的长度
一行n个正整数,用空格隔开。代表字典序最大的优美排列。
输入
3
输出
3 2 1