题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805107638517760;
具体思路:
根据题目要求,要先输出降序且不重复的数字元素,我们很容易想到用集合,当然,需要注意的是,在这里采用了字符串输入,在一定程度上减少了内存与时间消耗;
在者,输出第二个数组的时候,我们可以采取这样的策略:
在输出第一个集合的时候,用一个数组来记录这个集合的元素,那这样,用这个集合的元素和原来数字直接进行匹配即可,如果相同就把下标存起来,最后输出就可以了
Talk is cheap. Show me the code.
1 #include<bits/stdc++.h>//ptaL1-027 出租
2 using namespace std;
3 string s;//输入数字
4 vector<char>v1;//用来检查是否匹配,即经过set排序之后输出时再把数字存进去
5 vector<int >v2;//最后用来输出index下标
6 int main()
7 {
8 std::ios::sync_with_stdio(false);
9 set<char>::iterator it;//迭代器,相当于指针,set访问需要迭代器,map,list同
10 set<char>c;//集合,自动排序加判重
11 cin>>s;
12 for(register int i=0;i<s.length();i++)
13 {
14 c.insert(s[i]);
15 }
16 cout<<"int[] arr = new int[]{";
17 for(it=--c.end();it!=c.begin();it--)//为了好输出少输出一个
18 {
19 cout<<*it<<",";
20 v1.push_back(*it);//入库
21 }
22 cout<<*it<<"};"<<endl;//补全
23 v1.push_back(*it);
24 for(int i=0;i<s.length();i++)
25 {
26 for(register int j=0;j<v1.size();j++)
27 {
28 if(s[i]==v1[j])
29 {
30 v2.push_back(j);//匹配,如果相同则将下标入库等待输出
31 break;//找到相同即可,找到后停止
32 }
33 }
34 }
35 cout<<"int[] index = new int[]{";
36 for(register int i=0;i<v2.size();i++)
37 {
38 cout<<v2[i];
39 if(i<v2.size()-1)
40 cout<<",";
41 }
42 cout<<"};";
43 return 0;
44 }
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/245447.html