建北電資小社課
2023/10/27
Complexity
給 個整數(陣列a)
求這 個數的和
int sum=0; for(int i=0;i<n;i++) sum+=a[i]; cout<<sum<<"\n";
複雜度:
上界==下界
上界 最大值(包含)
上界 最大值(不含)
下界 最小值(包含)
下界 最小值(不含)
給 個整數(陣列a)
求這 個數的和
int sum=0; for(int i=0;i<n;i++) sum+=a[i]; cout<<sum<<"\n";
複雜度:
乘法比加法慢,那複雜度是否相同?
宣告sum 輸出sum 都需要時間,那這些時間需不需要算進去?
時間限制: 1000 ms
記憶體量: 65536 MB
電腦每秒約 次運算
實際情況須依長數而定
實際情況須依長數而定
資料型態 | 用途 | 記憶體大小 |
---|---|---|
int | 整數-2³¹~2³¹-1(約2*10⁹~-2*10⁹) | 4 bytes |
long long | 更大的整數 -2⁶³~2⁶³-1(約9*10¹⁸~-9*10¹⁸) | 8 bytes |
float | 浮點數 (可以有小數點的數字) | 4 bytes |
double | 更精確浮點數 (可以有小數點的數字) | 8bytes |
char | 字元 | 1 byte |
string | 字串 | 可變 |
pair<int,int> p;
first(int) | second(int) |
---|
cin>>p.first; cin>>p.second;
first | second |
---|
陣列
vector
int arr[5]={0};
vector<int> arr(5,0);
int arr[5];
vector<int> arr(5);
vector<int> arr;
空
輸出 arr 的大小 5
vector<int> arr(5,7); cout<<arr.size()<<"\n";
arr 為空 輸出 1
vector<int> arr; cout<<arr.empty()<<"\n";
[]
vector<int> arr; arr.push_back(8); arr.push_back(0); arr.push_back(7);
[8]
[8,0]
[8,0,7]
[]
arr.pop_back(); arr.pop_back(); arr.pop_back();
[8]
[8,0]
[8,0,7]
複雜度:
[]
cout<<arr.capacity()<<"\n";
[8,,]
[8,0,]
[8,0,7]
[,,]
cout<<arr.capacity()<<"\n";
[]
vector<int>().swap(arr); cout<<arr.empty()<<"\n";
[8,0,7]
arr:
太多了不想放ㄟ
敬請見諒😆
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(vector<int>::iterator it=arr.begin();it!=arr.end();it++){ cin>>*it; } for(vector<int>::reverse_iterator it=arr.rbegin();it!=arr.rend();it++){ cout<<*it<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(vector<int>::iterator it=arr.begin();it!=arr.end();it++){ cin>>*it; } for(vector<int>::reverse_iterator it=arr.rbegin();it!=arr.rend();it++){ cout<<*it<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(vector<int>::iterator it=arr.begin();it!=arr.end();it++){ cin>>*it; } for(vector<int>::reverse_iterator it=arr.rbegin();it!=arr.rend();it++){ cout<<*it<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(vector<int>::iterator it=arr.begin();it!=arr.end();it++){ cin>>*it; } for(vector<int>::reverse_iterator it=arr.rbegin();it!=arr.rend();it++){ cout<<*it<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(auto it=arr.begin();it!=arr.end();it++){ cin>>*it; } for(auto it=arr.rbegin();it!=arr.rend();it++){ cout<<*it<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(auto it=arr.begin();it!=arr.end();it++){ cin>>*it; } for(auto it=arr.rbegin();it!=arr.rend();it++){ cout<<*it<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(auto it=arr.begin();it!=arr.end();it++){ cin>>*it; } for(auto it=arr.rbegin();it!=arr.rend();it++){ cout<<*it<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(auto it=arr.begin();it!=arr.end();it++){ cin>>*it; } for(auto it=arr.rbegin();it!=arr.rend();it++){ cout<<*it<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(int &i:arr){ cin>>i; } for(auto &i:arr){ cout<<i<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(int &i:arr){ cin>>i; } for(auto &i:arr){ cout<<i<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(int &i:arr){ cin>>i; } for(auto &i:arr){ cout<<i<<" "; } cout<<"\n"; }
#include<bits/stdc++.h> using namespace std; int main(){ vector<int> arr(5); for(int &i:arr){ cin>>i; } for(auto &i:arr){ cout<<i<<" "; } cout<<"\n"; }
stack<int> stk; stk.push(20); stk.push(10);
10
top()
top()
20
stk
stk.top()+=2 cout<<stk.top()<<endl;
10
top()
20
stk
12
12
5
stk
5
stk
stk 為空 輸出 1
stack<int> stk; cout<<stk.empty()<<"\n";
queue<int> q;
q
q.push(8); q.push(0); q.push(7);
q
8
0
7
back
back
back
front
q.front()--; q.back()++; cout<<q.front()<<","<<q.back()<<"\n";
q
8
0
7
back
front
7
8
7,8
q.pop(); q.pop(); q.pop();
q
7
0
8
back
front
front
front
cout<<q.size()<<"\n"; cout<<q.empty()<<"\n";
q
0
1
#include<bits/stdc++.h> using namespace std; int main(){ priority_queue<int,vector<int>,decltype([](int a,int b){return a<b;})> pq; pq.push(5); pq.push(7); cout<<pq.top()<<endl; }
#include<bits/stdc++.h> using namespace std; int main(){ priority_queue<int,vector<int>,decltype([](int a,int b){return a<b;})> pq; pq.push(5); pq.push(7); cout<<pq.top()<<endl; }
#include<bits/stdc++.h> using namespace std; int main(){ priority_queue<int,vector<int>,decltype([](int a,int b){return a<b;})> pq; pq.push(5); pq.push(7); cout<<pq.top()<<endl; }
#include<bits/stdc++.h> using namespace std; int main(){ priority_queue<int,vector<int>,decltype([](int a,int b){return a<b;})> pq; pq.push(5); pq.push(7); cout<<pq.top()<<endl; }
不想用struct 那就用lambda
priority_queue<int> pq;
priority_queue<int,vector<int>,greater<int>> pq;
想由小到大
#include<bits/stdc++.h> using namespace std; struct comp{ bool operator()(int a,int b){ return a<b; } }; int main(){ priority_queue<int,vector<int>,comp> pq; }
#include<bits/stdc++.h> using namespace std; struct comp{ bool operator()(int a,int b){ return a<b; } }; int main(){ priority_queue<int,vector<int>,comp> pq; }
#include<bits/stdc++.h> using namespace std; struct comp{ bool operator()(int a,int b){ return a<b; } }; int main(){ priority_queue<int,vector<int>,comp> pq; }
#include<bits/stdc++.h> using namespace std; struct comp{ bool operator()(int a,int b){ return a<b; } }; int main(){ priority_queue<int,vector<int>,comp> pq; }
想自訂比較函示
這是有小到大有夠不值覺得啦啦啦~~~
pq.push(0); pq.push(8); pq.push(7);
8
pq
7
0
pq.top()
8
pq
7
0
pq.push(8); pq.push(0); pq.push(7);
8
pq
7
0
cout<<pq.size()<<"\n"; cout<<pq.empty()<<"\n";
0
1