题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805107638517760;
具体思路:
根据题目要求,要先输出降序且不重复的数字元素,我们很容易想到用集合,当然,需要注意的是,在这里采用了字符串输入,在一定程度上减少了内存与时间消耗;
在者,输出第二个数组的时候,我们可以采取这样的策略:
在输出第一个集合的时候,用一个数组来记录这个集合的元素,那这样,用这个集合的元素和原来数字直接进行匹配即可,如果相同就把下标存起来,最后输出就可以了
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 }