念旧的人,注定被困在回忆里
解题思路:
将数组升序排序,然后找每m个数的最大值减最小值的最小值,如不不排序直接判断的话,不能保证最优解。注意判断每m个数时都要赋值初值,避免影响结果
下面是c++代码:
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<string>
using namespace std;
int main()
{
int m, n;
cin >> m >> n;
int* arr = new int[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
int Min = 10e9, minn = 10e9, maxx = 0;
for (int i = 0; i <= n - m; i++) {
minn = 10e9, maxx = 0;
for (int j = i; j < i + m; j++) {
minn = min(minn, arr[j]);
maxx = max(maxx, arr[j]);
}
Min = min(Min, maxx - minn);
}
cout << Min;
return 0;
}
解题思路:
判断每个字符是否是小写字母,存到map或者set集合里,返回集合长度即可,注意字符串里有空格,所以不能用cin读入字符串,cin读入空格就会结束,所以可以用getline来读入字符串。
下面是c++代码:
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<string>
using namespace std;
int main()
{
string s;
map<char, int>mp;
getline(cin,s);
for (int i = 0; i < s.length(); i++) {
if (s[i] != ' ' && s[i] != ',' && s[i] != '\{' && s[i] != '\}') {
mp[s[i]]++;
}
}
cout << mp. size();
return 0;
}
解题思路:
从头遍历找最大值索引,从尾遍历找最小值索引,如果最大值索引小于最小值所以,直接加上最大值索引到头的距离和最小值到尾的距离的和,否则再减一,因为两者有交集重复计算了
下面是c++代码:
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<string>
using namespace std;
int main()
{
int n, sum = 0;
cin >> n;
int* arr = new int[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int max = arr[0], mindex = 0;
for (int i = 0; i < n; i++) {
if (max < arr[i]) {
max = arr[i];
mindex = i;
}
}
int min = arr[n - 1], mmindex = n - 1;
for (int i = n - 1; i >= 0; i--) {
if (min > arr[i]) {
min = arr[i];
mmindex = i;
}
}
if (mindex > mmindex) {
cout << mindex + n - 1 - mmindex - 1;
}
else {
cout << mindex + n - 1 - mmindex;
}
return 0;
}
解题思路:
依次遍历,相同输出0,不同为1
下面是c++代码:
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<string>
using namespace std;
int main()
{
string s1, s2;
cin >> s1 >> s2;
for (int i = 0; i < s1.length(); i++) {
if (s1[i] != s2[i]) {
cout << 1;
}
else {
cout << 0;
}
}
return 0;
}
解题思路:
两个数组,一个数组存要送给谁,一个存谁送给了当前索引的小朋友
下面是c++代码:
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<string>
using namespace std;
int main()
{
int n;
cin >> n;
int* arr = new int[n + 1];
int* brr = new int[n + 1];
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
for (int i = 1; i <= n; i++) {
brr[arr[i]] = i;//brr数组表示收到了谁的礼物
}
for (int i = 1; i <= n; i++) {
cout << brr[i] << " ";
}
return 0;
}