当前位置: 首页 > news >正文

【算法】双指针、递归与回溯、排序、查找

头像
⭐️个人主页:@小羊
⭐️所属专栏:Linux
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

  • 持续更新中...
    • 1、双指针
      • 移动零
      • 复写零
      • 快乐数
      • 长度最小的子数组
      • dd爱框框
    • 2、递归与回溯
    • 3、排序算法
    • 4、查找算法

持续更新中…


1、双指针

  • 对撞指针:一般用于顺序结构中,也称左右指针。两指针从两端向中间移动,一个指针从最左端开始,另一个从最右端开始,然后逐渐往中间逼近。终止条件一般是两个指针相遇或者错开left == right || left > right
  • 快慢指针:让两个移动速度不同的指针在数组或链表等序列结构上移动,经典用法有环形链表。如果我们要研究的问题出现循环往复的情况时,均可考虑快慢指针。
  • 滑动窗口:维护一个动态的窗口,在满足某些条件的情况下移动窗口,从而避免重复计算,提高效率。

移动零

  • 移动零

在这里插入图片描述

数组划分,根据某种规则将数组分为不同性质的两块。
这道题中用 l,r 维护一段区间,区间内全都是0。也就是说 l 始终指向的数字就是0。

在这里插入图片描述

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int l = 0, r = 0;
        while (r < nums.size())
        {
            if (nums[r]) swap(nums[r], nums[l++]);
            r++;
        }
    }
};

复写零

  • 复写零

在这里插入图片描述



快乐数

  • 快乐数

在这里插入图片描述

类似链表中带环的问题,当快慢指针相遇时入环。

class Solution {
public:
    int func(int m)
    {
        int sum = 0;
        while (m)
        {
            sum += pow(m % 10, 2);
            m /= 10;
        }
        return sum;
    }
    bool isHappy(int n) {
        int slow = n, fast = func(n);
        while (slow != fast)
        {
            slow = func(slow);
            fast = func(func(fast));
        }
        return slow == 1;
    }
};

长度最小的子数组

  • 长度最小的子数组

在这里插入图片描述



dd爱框框

  • dd爱框框

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, x;
    cin >> n >> x;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++)
            cin >> a[i];
    int left = -1, right = -1, sum = 0, len = INT_MAX;
    for (int l = 1, r = 1; r <= n; r++)
    { 
        sum += a[r]; // 1.进窗口
        while (sum >= x) // 2.判断
        {
            if (r - l + 1 < len)
            {
                // 3.更新结果
                left = l, right = r;
                len = right - left + 1;
            }
            sum -= a[l++]; // 4.出窗口
        }
    }
    cout << left << " " << right << endl;
    return 0;
}









2、递归与回溯

3、排序算法

4、查找算法


本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像

相关文章:

  • 面向工业与汽车领域的高安全可靠MCU——AS32X601系列芯片解析
  • 大视频背景暗黑风格的wordpress企业主题免费下载
  • 【接口封装】——21、解析Json对象数组的文本块
  • 为什么List、Set集合无法在遍历的时候修改内部元素
  • 添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎
  • 無人機的應用程序有那些可以部署在linux server 系統
  • 解决 HTTP 请求中的编码问题:从乱码到正确传输
  • Qt-ZMQ的使用补充(pub-sub)
  • 工具介绍《Awsome-Redis-Rogue-Server 与 redis-rogue-server》
  • 硬件学习笔记--50 CAN相关基础知识介绍
  • Work【2】:PGP-SAM —— 无需额外提示的自动化 SAM!
  • 静态分析技术:Jadx-GUI高级用法与模式识别
  • 中国智能制造加速跑:创新与应用齐飞
  • Excel 保护工作簿:它能解决哪些问题?如何正确使用?
  • Git使用
  • RabbitMQ消息持久化与Lazy模式对比分析
  • 《第六章 终章》在VMware中进行UR10e机器人的手眼标定实验全过程(ur10e手眼标定实验实机演示)
  • 【第4章】项目实战-亿级电商系统需求分析
  • cocos webview与通信
  • 【第七节】windows sdk编程:Windows 中的对话框
  • 4台肺癌手术,2名“90后”患者,这届年轻人的肺怎么了?
  • 美国明尼苏达州发生山火,过火面积超80平方公里
  • 习近平在中拉论坛第四届部长级会议开幕式的主旨讲话(全文)
  • 北京“准80后”干部兰天跨省份调任新疆生态环境厅副厅长
  • 国产水陆两栖大飞机AG600批产首架机完成总装下线
  • 秦洪看盘|预期改善,或迎来新的增量资金