链表迭代翻转|二分|状态压缩bfs|数学

 

🍭lc2039.bfs+空闲时间

把网络抽象成图,用 BFS 算出 0 号节点到各节点的最短距离 d 。

结合每个节点发消息的间隔 patience[v] ,先算消息往返需要 2d 秒。

再看 2d 和 patience[v] 的关系

  • 若 2d 能被 patience[v] 整除,最后一条消息已发时长 t 就是 patience[v] ;
  • 若不能整除,t 是 2d % patience[v] 。

接着算出节点收到最后一条回复的时间是 4d - t ,下一秒 4d - t + 1 就是节点变空闲的最早时间。

所有节点里时间的最大值,就是整个网络变空闲的时间 。

 

class Solution {
public:
int networkBecomesIdle(vector<vector<int>>& edges, vector<int>& patience)

{
int n = patience.size();
vector<vector<int>> g(n);


for (auto& e : edges)

       {
int v = e[0], w = e[1];
g[v].push_back(w);
g[w].push_back(v);
}

        vector<bool> vis(n, false);
vis[0] = true;
queue<int> q;
q.push(0);


int ans = 0;
for (int d = 0; !q.empty(); d++)

      {
int size = q.size();
for (int i = 0; i < size; i++)

          {
int v = q.front();
q.pop();
if (v > 0)

               {
int p = patience[v];

//两种情况求t
int t = p;
if (2 * d % p > 0)

                   {
t = 2 * d % p;
}


                    ans = max(ans, 4 * d - t + 1);
}


for (int w : g[v])

                  {
if (!vis[w])

                    {
vis[w] = true;
q.push(w);
}
}
}
}
return ans;
}
};

 

🍭lc847.状态压缩+多源bfs

多源bfs+位图记录每一条走过的路径,当有一条路径经过所有点时最短路径找到

 class Solution {

public:
int shortestPathLength(vector<vector<int>>& graph) {

        const int n = graph.size();
const int ans = (1 << n) -1;

        queue<pair<int,int>> q;

        vector<vector<int>> visit(n, vector<int>(1 << n));
int step = 0;
for (int i = 0; i < n; i++)

      {
q.push({i, 1 << i});
}

 

        while (!q.empty())

      {
int qsz = q.size();

            for (int i = 0; i < qsz; i++)

      {
auto p = q.front();
q.pop();

                int node = p.first;
int state = p.second;

                if (state == ans) return step;
if (visit[node][state] == 1) continue;

                for (auto next : graph[node])

              {

                    q.push({next, state|(1 << next)});
}

                visit[node][state] = 1;
}
step++;
}

        return -1;


}
};

 

 

lc459.双倍字符串

  return (s+s).find(s, 1) != s.size();

str.find(要找的子串, 开始查找的位置) ,返回的是子串第一次出现的起始索引;如果没找到,就返回一个特殊值( string::npos )

class Solution {
public:
bool repeatedSubstringPattern(string s) {
  return (s+s).find(s, 1) != s.size();
}
};

 啪很快,上来就写了一个暴力...

class Solution {

public:

    bool repeatedSubstringPattern(string s) {

        int n=s.size();

        for(int i=1;i<=n/2;i++)

        {

            if(n%i==0)

            {

        string check=s.substr(0,i);

        int hand=i;

        

        while(hand<=n)

        {

            string tmp=s.substr(hand,i);

            if(tmp!=check)

                break;

            hand+=i;

        }

        if(hand>=n) return true;

            }

        }

        return false;

    }

};

 

lc367.完全平方数

闭区间二分(三步)

[0,n-1].  l<=r   .   l r mid+-1

注意long long

class Solution {
public:
bool isPerfectSquare(int num) 
{
int n=num/2;
int l=0,r=n;
while(l<=r)
{
long long mid=l+(r-l)/2;

if(mid*mid>num)
r=mid-1;
else if(mid*mid==num)
return true;
else
l=mid+1;
}
return (long long)l*l==num;
}
};

 

lc448.消失的数字 o(n)

处理到理应位置后judge

 class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
vector<int> res;
int i = 0;
while (i < nums.size())

{
if (nums[i] == i + 1)

            {
i++;
continue;
}
int idealIdx = nums[i] - 1;
if (nums[i] == nums[idealIdx])

           {
i++;
continue;
}

//例如 实现把数字3放到索引2的位置
int tmp = nums[i];
nums[i] = nums[idealIdx];
nums[idealIdx] = tmp;
}
for (int i = 0; i < nums.size(); i++)

{
if (nums[i] != i+1)

            {   //未处理
res.push_back(i+1);
}
}
return res;
}

};

原代码 nlogn了...

class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums)
{
vector<int> ret;
int n=nums.size();
sort(nums.begin(),nums.end());

int k=nums.back();
int j=1;

for(int i=0;i<n;i++)
{
while(nums[i]>j)
{
ret.push_back(j);
j++;
}
if(j==nums[i]) j++;
}

while(k<n)
ret.push_back(++k);

return ret;
}
};

 

 

lc231.二的幂

二进制最高位为1,其余所有位为0

(n & (n - 1)) == 0 true

循环写法

class Solution {
public:
bool isPowerOfTwo(int n) 
{
while(n)
{
if(n==1) return true;
if(n&1) return false;
n>>=1;
}
return false;
}
};

计算机视角

class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
};

 

lc25

三指针,迭代翻转链表

class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* tmp = head;
int n = 0;
// 计算链表长度
while (tmp) {
n++;
tmp = tmp->next;
}
if (n < k) return head;

        ListNode* newHead = nullptr;
ListNode* cur = head;
ListNode* prevTail = nullptr;

        // 分组处理
while (n >= k) {
ListNode* groupHead = cur;
ListNode* prev = nullptr;
ListNode* tail = cur;
// 翻转一组 k 个节点
for (int i = 0; i < k; i++) {
ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
if (!newHead) {
newHead = prev;
}
if (prevTail) {
prevTail->next = prev;
}
prevTail = tail;
n -= k;
}
// 连接剩余节点
if (cur) {
prevTail->next = cur;
}

        return newHead;
}

    // 原 reverse 函数递归实现有问题,这里用迭代方式重写(也可继续用递归,不过迭代更直观)
ListNode* reverse(ListNode* head) {
ListNode* prev = nullptr;
ListNode* cur = head;
while (cur) {
ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
};

 

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

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

相关文章

Vulnhub 02-Breakout靶机渗透攻略详解

一、下载靶机 下载地址&#xff1a;https://download.vulnhub.com/empire/02-Breakout.zip 下载好后使用VM打开&#xff0c;将网络配置模式改为net&#xff0c;防止桥接其他主机干扰&#xff08;桥接Mac地址也可确定主机&#xff09;。 二、发现主机 使用nmap扫描没有相应的…

数据结构(5)单链表算法题(中)

一、合并两个有序链表 1、题目描述 https://leetcode.cn/problems/merge-two-sorted-lists 2、算法分析 这道题和之前的合并两个有序数组的思路很像&#xff0c;创建空链表即可&#xff0c;可以很轻松地写出如下代码。 /*** Definition for singly-linked list.* struct L…

园区网络搭建实验

跟着B站上的老师&#xff0c;用华为ensp模拟搭建了一个园区网络&#xff0c;感觉挺好玩的虽然老师说这个很简单&#xff0c;但还是比我公司里的拓扑复杂LSW3配置上行端口3/4配置为串口&#xff0c;下行端口1/2为access口用于连接终端[Huawei]vlan batch 10 20 --创建vlan [Hua…

【tips】小程序css ➕号样式

上传的时候一般页面显示的是加号。不用图片可以用样式实现&#xff1b;wxss&#xff1a; /* 加号 */ .plus-box {width: 91rpx;height: 91rpx;border-radius: 6rpx;background: rgba(204, 204, 204, 1);position: relative; /* 用于定位加号 */ }/* 水平线条 */ .plus-box::bef…

MCU中的GPIO(通用输入/输出)是什么?

MCU中的GPIO(通用输入/输出)是什么? GPIO(General-Purpose Input/Output,通用输入/输出)是微控制器(MCU)或嵌入式系统中的一种可编程数字接口,用于与外部设备进行简单的高低电平信号交互。它是最基础、最常用的外设之一,广泛应用于按键检测、LED控制、传感器通信等场…

echarts 之 datazoom Y轴缩放

如果想 y 轴也能够缩放&#xff0c;那么在 y 轴上也加上 dataZoom 组件const dataZoomY ref([{type: "slider",yAxisIndex: 0,startValue: 0,endValue: 9,filterMode: "empty",width: 10,height: "80%",showDataShadow: false,left: 5,},{type:…

(四)Python基础入门-核心数据结构

概览 列表操作&#xff08;增删改查/切片/推导式&#xff09;元组特性与不可变性字典操作&#xff08;键值对/嵌套字典&#xff09;集合运算&#xff08;交集/并集/差集&#xff09; Python的核心数据结构是编程的基石&#xff0c;本文将系统讲解列表、元组、字典和集合四大数…

FCN语义分割算法原理与实战

FCN语义分割算法原理与实战 本文若有舛误&#xff0c;尚祈诸君不吝斧正&#xff0c;感激不尽。 前提概要&#xff1a;所使用的材料来源 对应视频材料&#xff1a;FCN语义分割 虽然可能比较简单但是奠定了使用卷积神经网络做语义分割任务的基础。 语义分割&#xff1a;输入图片…

堆的理论知识

1 引入1.1 普通二叉树不适合用数组存储的原因普通二叉树的结构是 “不规则” 的 —— 节点的左右孩子可能缺失&#xff0c;且缺失位置无规律。 若用数组存储&#xff08;按 “层次遍历顺序” 分配索引&#xff0c;即根节点放索引 0&#xff0c;根的左孩子放 1、右孩子放 2&…

【python实用小脚本-161】Python Json转Xml:告别手敲标签——一行命令把配置秒变可导入的XML

Python Json转Xml&#xff1a;告别手敲标签——一行命令把配置秒变可导入的XML 关键词&#xff1a;json转xml、零依赖脚本、自动生成标签、小白友好、跨平台故事开场&#xff1a;周五下午&#xff0c;老板又甩来“配置翻译”任务 17:55&#xff0c;你正准备关机&#xff0c;老板…

WisFile(文件整理工具) v1.2.19 免费版

下载&#xff1a;https://pan.quark.cn/s/db99b679229fWisFile是一款免费AI文件管理工具&#xff0c;可以在电脑本地运行。它专注于解决文件命名混乱、归类无序和手动整理耗时的问题。通过AI技术智能识别文件内容&#xff0c;支持批量重命名和智能分类归档功能&#xff0c;可自…

简历美容院:如何把“打杂经历“包装成“核心项目“?

简历美容院&#xff1a;如何把"打杂经历"包装成"核心项目"&#xff1f; 大家好&#xff0c;我是程序员小白条&#xff0c;今天来研究下简历包装的事&#xff0c;小白可以按我的包装流程走&#xff0c;可以分步骤进行包装&#xff0c;具体怎么进行可以看正文…

零基础-动手学深度学习-7.7 稠密连接网络(DenseNet)

ResNet极大地改变了如何参数化深层网络中函数的观点。 稠密连接网络&#xff08;DenseNet&#xff09;在某种程度上是ResNet的逻辑扩展。让我们先从数学上了解一下。 7.7.1. 从ResNet到DenseNet 7.7.2. 稠密块体 DenseNet使用了ResNet改良版的“批量规范化、激活和卷积”架构…

Marin说PCB之POC电路layout设计仿真案例---09

好消息&#xff0c;好消息&#xff0c;小编最爱的国漫凡人修仙传电视剧版本的终于可以看了&#xff0c;小编我推荐一波啊&#xff0c;感兴趣的道友们可以去某酷视频去追剧啊。 好了&#xff0c;咱们言归正传啊。本期的案例是这个月中旬我们组的测试大哥阿永去某田实验室去测试我…

论文阅读--射频电源在半导体领域的应用

《射频电源在半导体领域的应用》 论文信息&#xff1a;左政,冯国楠,李建慧,等.射频电源在半导体领域的应用[J].软件和集成电路,2025,(04):38-43.DOI:10.19609/j.cnki.cn10-1339/tn.2025.04.007. 一、射频电源的定义与分类 1.1 定义射频电源&#xff08;RF Power Supply&#xf…

绿算技术携手昇腾发布高性能全闪硬盘缓存设备,推动AI大模型降本增效

在数字化浪潮席卷全球的今天&#xff0c;人工智能已经成为推动企业创新与发展的重要力量。广东省绿算技术有限公司&#xff08;简称“绿算技术”&#xff09;紧跟时代步伐&#xff0c;基于华为昇腾AI大模型&#xff0c;推出了高性能全闪硬盘缓存设备&#xff0c;致力于为人工智…

HoloLens2系列讲解 - 06 基本操作

一、导入MRTK插件 1. 首先要新建一个项目,打开unity,新建一个project。 2. 导入MRTK包。 3. 点击 Mixed Reality Toolkit > Add to scene and Configure 添加MR场景配置文件。

Linux Vim 编辑器使用指南

Linux Vim 编辑器使用指南一、Vim 简介 Vim&#xff08;Vi IMproved&#xff09;是 Linux/Unix 系统中最流行的文本编辑器之一&#xff0c;它是 Vi 的增强版&#xff0c;支持多模式操作、语法高亮、插件扩展等特性&#xff0c;无需鼠标即可高效编辑文本。 二、核心工作模式 Vim…

运维笔记:破解 VMware 迁移难题

一、VMware 迁移前的准备与评估1.1 迁移场景与目标分析VMware 迁移常见场景包括&#xff1a;同平台升级&#xff1a;从 vSphere 6.7 迁移到 7.0/8.0&#xff08;硬件兼容、功能迭代&#xff09;跨平台迁移&#xff1a;VMware→KVM/Xen&#xff08;降低 licensing 成本&#xff…

cartographer 点云数据的预处理

目录 传感器数据的走向 体素滤波与之后的处理 3D情况下的激光雷达数据的预处理 初始位姿估计 位姿推测器的优缺点分析与总结 可能有问题的点 可能的改进建议 传感器数据的走向 传感器数据从CollatedTrajectoryBuilder类的HandleCollatedSensorData函数 传递GlobalTrajec…