一、基础数值操作

1. 极值查找(优化版)

// 找最大值(处理空数组)
int find_max(int arr[], int len) {
    if(len == 0) return INT_MIN; // 错误处理
    int max_val = arr[0];
    for(int i=1; i<len; ++i) {
        max_val = max(max_val, arr[i]);
    }
    return max_val;
}

// 找最小值(安全版)
int find_min(int arr[], int len) {
    if(len == 0) return INT_MAX;
    int min_val = arr[0];
    for(int i=1; i<len; ++i) {
        min_val = min(min_val, arr[i]);
    }
    return min_val;
}

2. 奇偶判断(位运算优化)

void check_parity(int n) {
    (n & 1) ? cout << "奇数" : cout << "偶数";
}

二、数学运算

1. 质数判断(优化时间复杂度)

bool is_prime(int n) {
    if(n <= 1) return false;
    if(n <= 3) return true; // 2,3是质数
    if(n%2 == 0 || n%3 == 0) return false;
    // 6k±1 优化法
    for(int i=5; i*i<=n; i+=6) {
        if(n%i == 0 || n%(i+2) == 0) return false;
    }
    return true;
}

2. 最大公约数(欧几里得算法)

int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

// 非递归版
int gcd_iter(int a, int b) {
    while(b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

3. 最小公倍数

int lcm(int a, int b) {
    return a * b / gcd(a, b);
}

三、字符串操作

1. 回文数判断(数学方法优化)

bool is_palindrome(int num) {
    if(num < 0) return false;
    int reversed = 0, original = num;
    while(num > 0) {
        reversed = reversed * 10 + num % 10;
        num /= 10;
    }
    return original == reversed;
}

// 字符串版(修正原代码错误)
bool is_palindrome_str(int num) {
    string s = to_string(num);
    string rev = s;
    reverse(rev.begin(), rev.end());
    return s == rev;
}

2. 大小写转换(安全实现)

char to_upper(char c) {
    return (c >= 'a' && c <= 'z') ? c - 32 : c;
}

char to_lower(char c) {
    return (c >= 'A' && c <= 'Z') ? c + 32 : c;
}

四、数组操作

1. 数组求和

int array_sum(int arr[], int len) {
    int sum = 0;
    for(int i=0; i<len; ++i) {
        sum += arr[i];
    }
    return sum;
}

2. 查找元素

// 返回首次出现的索引,找不到返回-1
int find_element(int arr[], int len, int target) {
    for(int i=0; i<len; ++i) {
        if(arr[i] == target) return i;
    }
    return -1;
}

五、排序算法

冒泡排序

void bubble_sort(int arr[], int len) {
    for(int i=0; i<len-1; ++i) {
        bool swapped = false;
        for(int j=0; j<len-i-1; ++j) {
            if(arr[j] > arr[j+1]) {
                swap(arr[j], arr[j+1]);
                swapped = true;
            }
        }
        if(!swapped) break; // 提前终止优化
    }
}

六、其他实用方法

1. 斐波那契数列

// 动态规划版
int fibonacci(int n) {
    if(n <= 1) return n;
    int a = 0, b = 1;
    for(int i=2; i<=n; ++i) {
        int temp = a + b;
        a = b;
        b = temp;
    }
    return b;
}

2. 十进制转二进制

string dec_to_bin(int num) {
    if(num == 0) return "0";
    string res;
    while(num > 0) {
        res = to_string(num % 2) + res;
        num /= 2;
    }
    return res;
}

3. 计算平均数(防溢出)

double safe_avg(int arr[], int len) {
    if(len == 0) return 0.0;
    double sum = 0;
    for(int i=0; i<len; ++i) {
        sum += arr[i] / (double)len; // 分段累加
    }
    return sum;
}

七、扩展方法推荐

  1. 闰年判断
bool is_leap_year(int year) {
    return (year%4 ==0 && year%100 !=0) || (year%400 ==0);
}
  1. 统计字符出现次数
void count_chars(const string& s) {
    unordered_map<char, int> cnt;
    for(char c : s) cnt[c]++;
}
  1. 数组去重
vector<int> unique_array(int arr[], int len) {
    unordered_set<int> s(arr, arr+len);
    return vector<int>(s.begin(), s.end());
}
  1. 矩阵转置
void transpose_matrix(vector<vector<int>>& mat) {
    for(int i=0; i<mat.size(); ++i) {
        for(int j=i+1; j<mat[0].size(); ++j) {
            swap(mat[i][j], mat[j][i]);
        }
    }
}

0 条评论

目前还没有评论...