排序
HJ8 合并表记录
#include<iostream>
#include<map>
using namespace std;
int main(){
int n,i,j,k;
int a,b;
cin>>n;
map<int,int> m;
for(i=0;i<n;i++){
cin>>a>>b;
m[a]+=b;
}
for(auto mi:m){
cout<<mi.first << " " << mi.second << endl;
}
return 0;
}
HJ27 查找兄弟单词
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n,m,i,j,k,cnt=0;
string str[1001],sstr,strt,sstrt,ansstr;
cin>>n;
for(i=0;i<n;i++){
cin>>str[i];
}
sort(str,str+n);
cin>>sstr;
sstrt = sstr;
sort(sstrt.begin(),sstrt.end());
cin>>m;
for(i=0;i<n;i++){
if(sstr == str[i]){
continue;
}
strt = str[i];
sort(strt.begin(),strt.end());
if(strt == sstrt){
cnt++;
if(cnt == m){
ansstr = str[i];
}
}
}
cout<<cnt<<endl;
cout<<ansstr<<endl;
return 0;
}
// 减小循环次数 增加空间复杂度
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,m,i,j,k;
int num = 0;
string str[1001],sstr[1001],cstr,str1;
cin>>n;
for(i=0;i<n;i++){
cin>>str[i];
}
cin>>cstr;
str1 = cstr;
cin>>m;
sort(str1.begin(),str1.end());
for(i=0;i<n;i++){
string s;
s = str[i];
sort(s.begin(),s.end());
if(s == str1 && str[i] != cstr){
sstr[num++] = str[i];
}
}
sort(sstr,sstr+num);
cout<<num<<endl<<sstr[m-1]<<endl;
return 0;
}
双指针
NC17.最长回文子串
// 核心代码模式 ——暴力解法
int getLongestPalindrome(string A) {
// write code here
int i,j,k;
int max=0,len=0;
string str,strt;
for(i=0;i<A.length();i++){
str = "";
for(j=i;j<A.length();j++){
str+=A[j];
strt = str;
reverse(strt.begin(),strt.end());
if(strt == str){
len = str.length();
max = len>max?len:max;
}
}
}
return max;
}
//动态规划解法—同力扣第五题
string longestPalindrome(string s) {
string ans;
int a[1005][1005] = {0};
int len = s.length();
int i,j,k,l,maxlen=0;
for(i=0;i<len;i++){
a[i][i] = 1;
maxlen = 1;
ans = s[0];
}
for(j=1;j<len;j++){
for(i=0;i<j;i++){
if(j == i+1 && s[i] == s[j]) a[i][j] = 1;
else{
if(s[i] == s[j] && a[i+1][j-1] == 1) a[i][j] = 1;
}
if(a[i][j] == 1 && j-i+1>maxlen){
maxlen = j-i+1;
ans = s.substr(i,maxlen);
}
}
}
return ans;
}
HJ24 合唱队
#include<iostream>
using namespace std;
int main(){
int n,i,j,k,max;
int a[3001];
int f[3001]={0},m[3001]={0};
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
max = 0;
for(j=0;j<i;j++){
if(a[j]<a[i]&&f[j]+1>max){
f[i] = f[j]+1;
max = f[i];
}
}
}
for(i=n-1;i>=0;i--){
max = 0;
for(j=n-1;j>i;j--){
if(a[j]<a[i]&&m[j]+1>max){
m[i] = m[j]+1;
max = m[i];
}
}
}
max = 0;
for(i=0;i<n;i++){
if(f[i]+m[i]>max){
max = f[i]+m[i];
}
}
max ++ ;
cout<<n-max<<endl;
return 0;
}
HJ3 明明的随机数
#include<iostream>
using namespace std;
int main(){
int n,a[505]={0},i,j,k;
cin>>n;
for(i=0;i<n;i++){
cin>>k;
a[k]++;
}
for(i=0;i<501;i++){
if(a[i]!=0)
cout<<i<<endl;
}
return 0;
}