算法集训 | 暑期刷题营】8.12题---数论

简介: 算法集训 | 暑期刷题营】8.12题---数论

💖 ❄️我们的算法之路❄️💖


   众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。

☀️🌟短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼🌟☀️

💝二分,💝贪心,💝并查集,💝二叉树,💝图论,💝深度优先搜索(dfs) ,💝宽度优先搜索(bfs) ,💝数论,💝动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!🎉🎉🎉

image.png


今日主题:数论


 👉⭐️第一题💎


   ✨题目


      66. 加一


   ✨思路:


加一得十进一位个位数为 00 加法运算如不出现进位就运算结束了且进位只会是一
所以只需要判断有没有进位并模拟出它的进位方式,如十位数加 11 个位数置为 00,如此循环直到判断没有再进位就退出循环返回结果。
然后还有一些特殊情况当出现 9999、999999 之类的数字时,循环到最后也需要进位,出现这种情况时需要手动将它进一位。


   ✨代码:


class Solution {
public:
    void deal(int n, vector<int> &digits)
{
    if(n<0){
        digits.insert(digits.begin(),1);
        return;
    }
    if (digits[n] + 1 == 10)
    {
        digits[n] = 0;
        deal(n - 1, digits);
    }
    else
    {
        digits[n] += 1;
    }
}
vector<int> plusOne(vector<int> &digits)
{
    int n = digits.size();
    deal(n - 1, digits);
    return digits;
}
};

image.png


 👉⭐️第二题💎


   ✨题目


      172. 阶乘后的零

image.png


   ✨思路:


10=2*5易得,0只能由2和5相乘得到,而在5的个数又小于2的个数,所以按照木桶原理,只需要求出阶乘中有多少5,就可以的到有多少0,可直接用递归求得


   ✨代码:


class Solution
{
public:
    int ans1;
    void deal(int n)
    {
        if (n <= 1) return;
        deal(n-1);  
        while (!(n % 5))
        {   n /= 5; ans1++;}   
       };
    int trailingZeroes(int n)
    {
        deal(n);
        return ans1;
    }
};


 👉⭐️第三题💎


   ✨题目


     3.连续整数求和

image.png


   ✨思路:


其实就是一个数学推导的过程,首先如果 组数i为奇数,那么n必须能够整除i,并且平均数avg=n/i,avg>i/2,那么i<sqrt(2n)这样才有足够的i满足条件;当组数i为偶数时,则还要满足(2 * (n / i ) + 1) * (i / 2),随后一个for循环解决问题,时间复杂度为 O(√n),,嗯,这是纯用数学归纳法得到,看了题解才知,原来直接用等差数列求和推出即可。。


   ✨代码:


class Solution {
public:
int consecutiveNumbersSum(int n)
{
    int ans = 0;
    for (int i = 1; i < sqrt(2 * n); i++)
    {
        if (!(n % i) && i & 1)
        {
            ans++;
        }
        else if (!(i & 1))
        {
            int t=n/i;
            ans += (2 * t + 1) * (i / 2) == n ? 1 : 0;
        }
    }
    return ans;
}
};

image.png


 👉⭐️第四题💎


   ✨题目


      4. OKEA

image.png


image.png


   ✨代码:


q = int(input())
for _ in range(q):
    n, k = map(int, input().split())
    s = input()
    if s == s[::-1] or k == 0:
        print(1)
    else:
        print(2)

写在最后

相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!


相关文章
|
7月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
3月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
25 0
|
5月前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
5月前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
52 0
|
7月前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
7月前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
|
7月前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
|
12天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
145 80
|
5天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
8天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。

热门文章

最新文章