#include <iostream>
using namespace std;
//LogN底数可以省略是因为Log2 N = Log2 5 * Log5 N,常数可以省略
//求x的n次方
//O(n)
int func1(int x, int n){
int result = 1;
for (size_t i = 0; i < n; i++)
{
result *= x;
}
return result;
}
int func2(int x, int n){
if(n == 0)
return 1;
return func2(x, n-1) * x;
}
int func3(int x, int n){
if(n == 0)
return 1;
if(n % 2 == 1)
return func3(x, n / 2) * func3(x, n / 2) * x;
return func3(x, n / 2) * func3(x, n / 2);
}
//O(Logn)
int func4(int x, int n){
if(n == 0)
return 1;
int t = func4(x, n / 2);
if(n % 2 == 1)
return t * t * x;
return t * t;
}
int main(){
}
#include <iostream>
using namespace std;
//斐波那契数列
//时间O(n²) 空间O(n)
int func1(int n){
if(n <= 0)
return 0;
if(n == 1)
return 1;
return func1(n -1) + func1(n - 2);
}
//时间O(n) 空间O(n) first = 1, second = 1
int func2(int first, int second, int n){
if(n <= 0)
return 0;
if(n < 3)
return 1;
if(n == 3)
return first + second;
return func2(second, first + second, n - 1);
}
int main(){
}
#include <iostream>
#include <vector>
using namespace std;
//找出数组中出现次数最多的字母,并记录其出现字数
//时间O(n²) 空间O(1)
void solution1(const vector<char> &a){
char result;
int max_count = 0;
for (size_t i = 0; i < a.size(); i++){
int num = 0;
for (size_t j = 0; j < a.size(); j++){
if(a[i] == a[j])
num++;
}
if(num > max_count){
result = a[i];
max_count = num;
}
}
}
//时间O(n) 空间O(1)
void solution2(const vector<char> &a){
int record[26] = {0};
for (size_t i = 0; i < a.size(); i++){
record[a[i] - 'a']++;
}
char result;
int max_count = 0;
for (size_t i = 0; i < 26; i++){
if(record[i] > max_count){
max_count = record[i];
result = i + 'a';
}
}
}
int main(){
}