0%

題目連結:Sorting: Bubble Sort | HackerRank

這題雖然有更好的算法(merge sort+反序數對),但用氣泡就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void countSwaps(vector<int> a) {
int ct=0;
for(int i=0;i<a.size();i++){
for (int j=0;j<a.size()-1;j++){
if (a[j]>a[j+1]){
ct++;
swap(a[j],a[j+1]);
}
}
}
cout<<"Array is sorted in "<<ct<<" swaps."<<"\n";
cout<<"First Element: "<<a[0]<<"\n";
cout<<"Last Element: "<<a[a.size()-1];
return;
}
閱讀全文 »

題目連結:2D Array - DS | HackerRank

如題,二維陣列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int hourglassSum(vector<vector<int>> arr) {
int mx=-0x3f3f3f3f;
for(int i=0;i<arr.size()-2;i++){
for(int j=0;j<arr[i].size()-2;j++){
int sum=arr[i][j]+
arr[i][j+1]+
arr[i][j+2]+
arr[i+1][j+1]+
arr[i+2][j]+
arr[i+2][j+1]+
arr[i+2][j+2];
mx=max(mx,sum);
}
}
return mx;
}
閱讀全文 »

題目連結:Minimum Swaps 2 | HackerRank

注意算完(算之前亦可)要將兩數交換

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int minimumSwaps(vector<int> arr) {
vector<int> o(arr);
sort(o.begin(),o.end());
int ct=0,update=0;
int m[100010]{0};
for(int i=0;i<arr.size();i++){
if(arr[i]!=o[i]){
swap(arr[i],arr[arr[i]-1]);
ct++;
i--;
}
}
return ct;
}
閱讀全文 »

題目連結:Array Manipulation | HackerRank

只要算開始與結束即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
struct edge{
int s,e,c;
};

long arrayManipulation(int n, vector<edge> q) {
long mx=0,now=0;
sort(q.begin(),q.end(),[](edge a,edge b){
return a.s<b.s;
});
vector<edge> bk(q);
sort(bk.begin(),bk.end(),[](edge a,edge b){
return a.e<b.e;
});

int i=0;
for(auto a:q){
now+=a.c;
while(i<q.size() && a.s>bk[i].e){
now-=bk[i].c;
i++;
}
mx=max(mx,now);
}
return mx;
}
閱讀全文 »

題目連結:Hash Tables: Ransom Note | HackerRank

這APCS應該不會考吧?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void checkMagazine(vector<string> magazine, vector<string> note) {
unordered_map<string,int> m,n;
for(auto a:magazine){
m[a]++;
}
for(auto a:note){
n[a]++;
}

for(auto a:n){
if(m[a.first]<n[a.first]){
cout<<"No\n";
return;
}
}
cout<<"Yes\n";
}
閱讀全文 »

題目連結:Sherlock and Anagrams | HackerRank

對於每個左右端窮舉即可,不過別做成O(N4logN)就好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int sherlockAndAnagrams(string s) {
int ct=0,len=s.size();
for(int i=0;i<len;i++){
for(int j=i;j<len;j++){
multiset<char> st,tt;
for(int k=i;k<=j;k++){
st.insert(s[k]);
tt.insert(s[k]);
}

for(int k=i+1;k<len-(j-i);k++){
tt.insert(s[k+(j-i)]);
auto it=tt.find(s[k-1]);
if(it!=tt.end()) tt.erase(it);
if(tt==st) ct++;
}
}
}
return ct;
}
閱讀全文 »