5.12 note

news2025/5/13 18:12:41

Leetcode

图 邻接矩阵的dfs遍历

 class Solution {
private:
    vector<vector<int>> paths;
    vector<int> path;


    void dfs(vector<vector<int>>& graph, int node) {
        // 到n - 1结点了保存
        if (node == graph.size() - 1) {
            paths.push_back(path);
            return;
        }
        // 遍历每条能走的路
        for (int i = 0; i < graph[node].size(); ++i) {
            path.push_back(graph[node][i]);
            dfs(graph, graph[node][i]);
            // 回溯
            path.pop_back();
        }
    }


public:
    vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {
        path.push_back(0);
        // 起点能走的路
        for (int i = 0; i < graph[0].size(); ++i) {
            path.push_back(graph[0][i]);
            dfs(graph, graph[0][i]);
            path.pop_back();        
        }
        return paths;
    }
};

 

 

dfs板子

class Solution {
    /*
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
    */
    
    vector<string> ret;
    string path;
    int _n=0;
    
public:
    vector<string> generateParenthesis(int n) {
        _n=n;
        dfs(0,0,0);
        
        return ret;
    }
    
    void dfs(int i,int l,int r)
    {
        if(r==_n)
        {
            ret.push_back(path);
            return;
        }
        
        if(l<_n)
        {
            path+="(";
            dfs(i+1,l+1,r);
            path.pop_back();
        }
        if(r<l)
        {
            path+=")";
            dfs(i+1,l,r+1);
            path.pop_back();
        }
    }
};

 

bool check全排列剪枝

前文回顾: 【[Lc_3 回溯] 决策树 | 全排列 | 子集 - CSDN App】https://blog.csdn.net/2301_80171004/article/details/146527379?sharetype=blog&shareId=146527379&sharerefer=APP&sharesource=2301_80171004&sharefrom=link

class Solution {
    vector<vector<int>> ret;
    bool check[7]={false};
    vector<int> path;
 
public:
    vector<vector<int>> permute(vector<int>& nums) 
    {
        dfs(nums);
        return ret;
    }
 
    void dfs(vector<int>& nums)
    {
        if(path.size()==nums.size())
        {
            ret.push_back(path);
            return;
        }
 
        for(int i=0;i<nums.size();i++)
        {
            if(check[i]==false)  //剪枝
        {
            path.push_back(nums[i]);
            check[i]=true;//借助 全局变量标记

 
            dfs(nums); //决策树 深度遍历
 
            path.pop_back();//尾删
            check[i]=false;
        }
        }
    }
};

 

 

 

string resize reserve

reverse是逆转

1. 使用  resize  方法: resize  函数可以改变字符串的长度,如果新长度大于原来的长度,会在字符串末尾填充指定字符(默认为  '\0' );如果新长度小于原来的长度,会截断字符串。
 
cpp   
std::string str = "hello";
str.resize(10, 'x'); // 把字符串长度调整为 10,后面填充 'x'
 
 
1. 使用  reserve  方法: reserve  函数预分配一定大小的空间,但不改变字符串的长度,主要用于提前知道字符串大概的大小,减少后续扩容的次数,提高性能。
 
cpp   
std::string str;
str.reserve(100); // 预分配能容纳 100 个字符的空间

lambda表达式实现DFS决策的写法

class Solution {

public:

    vector<string> validStrings(int n) {

        vector<string> ans;

        string path(n, 0);

 

        auto dfs = [&](auto&& dfs, int i) -> void 

        {

            if (i == n) 

            {

                ans.push_back(path); 

   // 注意这里复制了一份 path,需要 O(n) 时间

                return;

            }

 

            // 填 1

            path[i] = '1';

            dfs(dfs, i + 1);

 

            // 填 0

       if (i == 0 || path[i - 1] == '1') 

            {

                path[i] = '0'; // 直接覆盖

                dfs(dfs, i + 1);

            }

        };

 

        dfs(dfs, 0);

        return ans;

    }

};
 
1. 右值引用  dfs  参数传递的设计原因:
- 在这个 Lambda 表达式  auto dfs = [&](auto&& dfs, int i) -> void  中, auto&& dfs  这种写法是为了实现递归调用。 auto&&  是一种通用引用(也叫转发引用),在这里它被用来接收函数自身(因为递归时需要调用自身)。
- 使用  auto&&  来接收  dfs  有两个好处。一方面,它可以接收左值(也就是已经存在的对象),因为递归调用时传递的  dfs  是一个已经定义好的函数对象,是左值。另一方面,它也可以完美处理一些更复杂的场景(比如在模板函数中传递函数对象等),具有更好的通用性。
- 而右值引用  &&  在这里的作用是,当调用递归函数时,它能高效地处理函数对象的传递,避免不必要的复制操作,提高程序的性能。因为  dfs  这个函数对象本身可能包含一些状态(比如捕获的外部变量  ans  和  path  ),如果每次递归调用都进行复制,会消耗额外的时间和空间。使用右值引用  &&  就可以直接传递这个函数对象的引用,而不是复制它,这样在递归调用时就更加高效了。
2.  dfs  开始执行的时机:
- 在定义完  dfs  这个 Lambda 表达式之后,代码中  dfs(dfs, 0);  这一行开始执行  dfs  函数。
- 当程序执行到  validStrings  函数的  dfs(dfs, 0);  时, dfs  函数开始第一次执行,从字符串的索引  0  位置开始进行处理。因为  0  作为参数传递给  dfs  函数的  i  参数,所以会从字符串的第一个字符开始尝试不同的取值(先设为  1  进行递归,然后在满足条件时设为  0  进行递归),进而通过递归不断地探索后续位置的字符组合情况,直到满足递归终止条件( i == n  )。

 

 

 

在  sort  的比较函数中, a  和  b  应该使用  const  引用,避免不必要的拷贝。

例如

sort(points.begin(), points.end(), [](const vector<int>& a, const vector<int>& b) {

            return a[0] < b[0];

        });

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2374842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨时钟域(CDC,clock domain crossing)信号处理

参考视频&#xff1a; 数字IC&#xff0c;FPGA秋招【单bit信号的CDC跨时钟域处理手撕代码合集】_哔哩哔哩_bilibili 一、亚稳态 原因是&#xff1a;建立时间和保持时间没有保持住。然后在下图的红框里面&#xff0c;产生亚稳态。因为电路反馈机制&#xff0c;最后大概率会恢复…

OBS studio 减少音频中的杂音(噪音)

1. 在混音器中关闭除 麦克风 之外的所有的音频输入设备 2.在滤镜中增加“噪声抑制”和“噪声门限”

智能手表 MCU 任务调度图

智能手表 MCU 任务调度图 处理器平台&#xff1a;ARM Cortex-M33 系统架构&#xff1a;事件驱动 多任务 RTOS RTOS&#xff1a;FreeRTOS&#xff08;或同类实时内核&#xff09; 一、任务调度概览 任务名称优先级周期性功能描述App_MainTask中否主循环调度器&#xff0c;系统…

S7-1500——零基础入门2、PLC的硬件架构

PLC的硬件架构 一,西门子PLC概述二,CPU介绍三,数字量模块介绍四,模拟量模块介绍五,其他模块介绍一,西门子PLC概述 本节主要内容 西门子PLC硬件架构,主要内容包括PLC概述、组成、功能及S7-1500 demo的组成与安装演示。 介绍了PLC的定义、功能、应用场合,以及与继电器控…

【PmHub后端篇】Skywalking:性能监控与分布式追踪的利器

在微服务架构日益普及的当下&#xff0c;对系统的性能监控和分布式追踪显得尤为重要。本文将详细介绍在 PmHub 项目中&#xff0c;如何使用 Skywalking 实现对系统的性能监控和分布式追踪&#xff0c;以及在这过程中的一些关键技术点和实践经验。 1 分布式链路追踪概述 在微服…

利用“Flower”实现联邦机器学习的实战指南

一个很尴尬的现状就是我们用于训练 AI 模型的数据快要用完了。所以我们在大量的使用合成数据&#xff01; 据估计&#xff0c;目前公开可用的高质量训练标记大约有 40 万亿到 90 万亿个&#xff0c;其中流行的 FineWeb 数据集包含 15 万亿个标记&#xff0c;仅限于英语。 作为…

【RabbitMQ】应用问题、仲裁队列(Raft算法)和HAProxy负载均衡

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【中间件】企业级中间件剖析 一、幂等性保障 什么是幂等性&#xff1f; 幂等性是指对一个系统进行重复调用&#xff08;相同参数&#xff09;&#xff0c;无论同一操作执行多少次&#xff0c;这些请求…

软件设计师-错题笔记-系统开发与运行

1. 解析&#xff1a; A&#xff1a;模块是结构图的基本成分之一&#xff0c;用矩形表示 B&#xff1a;调用表示模块之间的调用关系&#xff0c;通过箭头等符号在结构图中体现 C&#xff1a;数据用于表示模块之间的传递的信息&#xff0c;在结构图中会涉及数据的流向等表示 …

C#简易Modbus从站仿真器

C#使用NModbus库&#xff0c;编写从站仿真器&#xff0c;支持Modbus TCP访问&#xff0c;支持多个从站地址和动态启用/停用从站&#xff08;模拟离线&#xff09;&#xff0c;支持数据变化&#xff0c;可以很方便实现&#xff0c;最终效果如图所示。 项目采用.net framework 4.…

【深度学习】目标检测算法大全

目录 一、R-CNN 1、R-CNN概述 2、R-CNN 模型总体流程 3、核心模块详解 &#xff08;1&#xff09;候选框生成&#xff08;Selective Search&#xff09; &#xff08;2&#xff09;深度特征提取与微调 2.1 特征提取 2.2 网络微调&#xff08;Fine-tuning&#xff09; …

视觉-语言-动作模型:概念、进展、应用与挑战(下)

25年5月来自 Cornell 大学、香港科大和希腊 U Peloponnese 的论文“Vision-Language-Action Models: Concepts, Progress, Applications and Challenges”。 视觉-语言-动作 (VLA) 模型标志着人工智能的变革性进步&#xff0c;旨在将感知、自然语言理解和具体动作统一在一个计…

一键解锁嵌入式UI开发——LVGL的“万能配方”

面对碎片化的嵌入式硬件生态&#xff0c;LVGL堪称开发者手中的万能配方。它通过统一API接口屏蔽底层差异&#xff0c;配合丰富的预置控件&#xff08;如按钮、图表、滑动条&#xff09;与动态渲染引擎&#xff0c;让工程师无需深入图形学原理&#xff0c;效率提升肉眼可见。 L…

智慧城市综合运营管理系统Axure原型

这款Axure原型的设计理念紧紧围绕城市管理者的需求展开。它旨在打破传统城市管理中信息孤岛的局面&#xff0c;通过统一标准接入各类业务系统&#xff0c;实现城市运营管理信息资源的全面整合与共享。以城市管理者为中心&#xff0c;为其提供一个直观、便捷、高效的协同服务平台…

Qwen智能体qwen_agent与Assistant功能初探

Qwen智能体qwen_agent与Assistant功能初探 一、Qwen智能体框架概述 Qwen&#xff08;通义千问&#xff09;智能体框架是阿里云推出的新一代AI智能体开发平台&#xff0c;其核心模块qwen_agent.agent提供了一套完整的智能体构建解决方案。该框架通过模块化设计&#xff0c;将L…

可视化图解算法37:序列化二叉树-II

1. 题目 描述 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树&#xff0c;不对序列化之后的字符串进行约束&#xff0c;但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。 二叉树的序列化(Serialize)是指&#xff1a;把一棵二叉树按照某种遍…

C++GO语言微服务和服务发现②

01 创建go-micro项目-查看生成的 proto文件 02 创建go-micro项目-查看生成的main文件和handler ## 创建 micro 服务 命令&#xff1a;micro new --type srv test66 框架默认自带服务发现&#xff1a;mdns。 使用consul服务发现&#xff1a; 1. 初始consul服务发现&…

【Web前端开发】CSS基础

2.CSS 2.1CSS概念 CSS是一组样式设置的规则&#xff0c;称为层叠样式表&#xff0c;用于控制页面的外观样式。 使用CSS能够对网页中元素位置的排版进行像素控制&#xff0c;实现美化页面的效果&#xff0c;也能够做到页面的样式和结构分离。 2.2基本语法 通常都是&#xff…

Git实战经验分享:深入掌握git commit --amend的进阶技巧

一、工具简介 git commit --amend是Git版本控制系统的核心补救命令&#xff0c;主要用于修正最近一次提交的元数据。该命令不会产生新的提交记录&#xff0c;而是通过覆盖原提交实现版本历史的整洁性&#xff0c;特别适合在本地仓库进行提交优化。 二、核心应用场景 提交信息…

PTA:jmu-ds-最短路径

给定一个有向图&#xff0c;规定源点为0&#xff0c;求源点0到其他顶点最短路径。###你要实现的 函数接口定义&#xff1a; void Dijkstra(MGraph g,int v);//源点v到其他顶点最短路径 裁判测试程序样例&#xff1a; #include <stdio.h> #include <iostream> …

WEB UI自动化测试之Pytest框架学习

文章目录 前言Pytest简介Pytest安装Pytest的常用插件Pytest的命名约束Pytest的运行方式Pytest运行方式与unittest对比主函数运行命令行运行执行结果代码说明 pytest.ini配置文件方式运行&#xff08;推荐&#xff09;使用markers标记测试用例 pytest中添加Fixture&#xff08;测…