学习笔记N-030
基础算法
- 更新
- 内容块
- 32
- 阅读
- 约 2 分钟
- 路径
- 学习笔记 / C++ / C++算法
算法基础:
1.统计一个整数的位数,可转化为字符串处理
int countDigits(int n) {
return to_string(abs(n)).size();2.计算一个整数每一位数字的累加和,通过取模计算,通过累除递推到下一位
int getDigitSum(int n) {
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;3.分割一个整数的前后两部分
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.闰年判断:

具体到月时,还要判断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的矩阵,最多有多少个子矩阵?

14.矩阵旋转
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)
int x = index / n; // 行号
int y = index % m; // 列号
[x][y]坐标可以直接搜索到string类型数据的二维坐标,不用在你为第几个数和坐标的关系再+1或-1(对于原生就是n*m的数组)