项目空间

学习笔记N-030

基础算法

更新
内容块
32
阅读
约 2 分钟
路径
学习笔记 / C++ / C++算法

算法基础:

1.统计一个整数的位数,可转化为字符串处理

代码块C++
int countDigits(int n) {
    return to_string(abs(n)).size();

2.计算一个整数每一位数字的累加和,通过取模计算,通过累除递推到下一位

代码块C++
int getDigitSum(int n) {
    int sum = 0;
    while (n > 0) {
        sum += n % 10;
        n /= 10;
    }
    return sum;

3.分割一个整数的前后两部分

代码块C++
 int divisor = pow(10, half);
 int front = i / divisor; 
 int back = i % divisor;  

4.有vector <string> arr= {“ ”};

arr.size()统计arr中字符个数

arr[i].size()统计arr中第i个字符串的长度,第i行的总列数

5.判断从一个大数组中取出的符合某个规定的某个/某些子串的长度时,可以遍历子串,把遍历数累加或者子串的下标加一,累加数或是最后一个下标加一等于某个规定(这个规定不但规定了格式,也规定了长度)。(lq3492)

6.闰年判断:

基础算法 · 图 1

具体到月时,还要判断month==2

7.日期题时间戳的转化(把一段时间到一段时间转化为秒数),使得具体的时间可以参加计算

8.lq17142三角形塔公式

123456 两次前缀和 或 n=h * (h + 1) * (h + 2) / 6

9.求区间 [A, B] 内元素个数:cnt=pre[B]−pre[A−1]

10.组合数公式:c*(c-1)/2

11.cout << 一个数 & 1;按位与运算

取出整数的二进制最低位。

  • •如果数字是偶数,最低位为 0,x & 1 的结果就是 0
  • •如果数字是奇数,最低位为 1,x & 1 的结果就是 1

12.矩阵中找一个符合某个要求的数 n 方复杂度,矩阵中找一段连续的,符合要求的一段数,n 三次方复杂度

13.对于n*n的矩阵,最多有多少个子矩阵?

基础算法 · 图 2

14.矩阵旋转

代码块C++
  auto b = vector(n, vector(n, 0));
  auto c = vector(n, vector(n, 0));
  c[j][n - i - 1] = b[i][j]        //顺时针
  c[n - j - 1][i] = b[i][j]        //逆时针

15.求n*m的矩阵中第index个字符的二维坐标(string)

代码块C++
int x = index / n;  // 行号
int y = index % m;  // 列号
[x][y]坐标

可以直接搜索到string类型数据的二维坐标,不用在你为第几个数和坐标的关系再+1或-1(对于原生就是n*m的数组)