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

分治(8题)

目录

一、快排

1.颜色分类

 2.排序数组

3.数组中的第k个最大元素

 4.最小的K个数

二、归并

1. 排序数组

2.数组中的逆序对

3.计算右侧小于当前元素的个数

4.翻转对 


一、快排

1.颜色分类

 75. 颜色分类 - 力扣(LeetCode)

        left和right,初始一个初始化为-1,一个初始化为nums.size()。

        i下标左侧是已经遍历过的位置。i位置上的值和left上的值交换时要将i++,因为此时交换过来的值也是已经被交换过的,但是和right位置上的值交换时i不--,因为此时交换过来的值还未检验过。 

class Solution {
public:void sortColors(vector<int>& nums) {int left = -1;int right = nums.size();for(int i = 0; i < right;){if(nums[i] == 0){swap(nums[++left], nums[i++]);}else if(nums[i] == 1){i++;}else{swap(nums[--right], nums[i]);}}}
};

 2.排序数组

912. 排序数组 - 力扣(LeetCode)

        数据有重复的情况下,分三块的效率更高 。在极端情况下,若数组内的值全相同,那么将数组分成两块的快排时间复杂度将会变为O(n的平方),而分三块的快排则只需要O(n)的时间复杂度

优化:如果我们想要快排的渐进时间复杂度逼近n*logn。我们需要随机选取基准元素,也即下面的

 int getnum(vector<int>& nums, int left , int right)

{ return nums[left + (rand() % (right - left + 1))]; }这个函数

class Solution {
public:vector<int> sortArray(vector<int>& nums) {srand(time(NULL));myqsort(nums, 0, nums.size() - 1);//myqsort传进去的是该区间两侧的有效值return nums;}void myqsort(vector<int>& nums, int l , int r){if(l >= r)return;int key = getnum(nums, l, r);int i = l, left = l - 1, right = r + 1;//left和righr定义在最左端往左一格和最右端往右一格while(i < right){if(nums[i] < key){left++;swap(nums[left], nums[i]);//如果nums[i]小于基准值,说明小于基准值的边界可以 //扩展了,而这个边界是left,因此++left后将 //nums[i]和nums[left]这两个位置的数交换i++;}else if(nums[i] == key){i++;}else{right--;swap(nums[right],nums[i]);}}myqsort(nums, l, left);myqsort(nums, right, r);}int getnum(vector<int>& nums, int left , int right){return nums[left + (rand() % (right - left  + 1))];}
};

3.数组中的第k个最大元素

215. 数组中的第K个最大元素 - 力扣(LeetCode)

class Solution {
public:int mysort(vector<int>& nums, int l, int r, int k){if(l == r)return nums[l];int key = getnum(nums, l, r);int i = l, left = l - 1, right = r + 1;while(i < right){if(key > nums[i]){swap(nums[++left], nums[i++]);//如果}else if( key == nums[i]){i++;}else{swap(nums[--right], nums[i]);}}int c = r - right + 1,b = right - left - 1;if(c >= k){return mysort(nums, right, r, k);}else if(b + c >= k){return key;}else{return mysort(nums , l, left,k -b - c );}}int getnum(vector<int>& nums, int left , int right){return nums[left + (rand() % (right - left  + 1))];}int findKthLargest(vector<int>& nums, int k) {return mysort(nums, 0, nums.size()-1, k);}};

 4.最小的K个数

 面试题 17.14. 最小K个数 - 力扣(LeetCode)

        这题和第三题是几乎一样的,而这种算法之所以快,是因为我们不需要将它们全部排好序。 

class Solution {
public:vector<int> smallestK(vector<int>& arr, int k) {vector<int> ret;if (arr.size() == 0)return ret;srand(time(NULL));MyQuickSelect(arr, 0, arr.size() - 1, k);return { arr.begin(), arr.begin() + k };}void MyQuickSelect(vector<int>& arr, int l, int r, int k){if (l == r)return;int key = getnum(arr, l, r);int i = l, left = l - 1, right = r + 1;while (i < right){if (arr[i] < key){swap(arr[++left], arr[i++]);}else if (arr[i] == key){i++;}else {swap(arr[--right], arr[i]);}}int a = left - l + 1, b = right - left - 1;if (a > k){MyQuickSelect(arr, l, left, k);}else if (a + b >= k){return;}else{MyQuickSelect(arr, right, r, k - a - b);}}int getnum(vector<int>& arr, int l, int r){return arr[l + rand() % (r - l + 1)];}
};

二、归并

1. 排序数组

912. 排序数组 - 力扣(LeetCode)

         实际上我们可以把它看成一个二叉树后序遍历。

        我们关注一次过程即可,我们先把左右两边排好,然后把排好的元素一个一个放入临时数组,左右两边合成一块后,再把它覆盖掉原来的数组。

        (由于我们是后续遍历,因此我们首先会把整个数组一直分,直到每个部分只有一个元素,这时候很容易就能把两个只有一个元素的部分合并了,然后再不断向上返回合并)

class Solution {
public:vector<int> tmp;//数组在全局开 会节省很多的时间vector<int> sortArray(vector<int>& nums) {int n = nums.size();tmp.resize(n);mysort(nums, 0, nums.size() - 1);return nums;}void mysort(vector<int> & nums, int l, int r){if(l == r)return;//这里写成l >= r 会更安全 int mid = l + (r - l)/2;mysort(nums, l , mid);mysort(nums, mid + 1, r);int cur1 = l, cur2 = mid + 1, i = 0;while(cur1 <= mid && cur2 <= r){if(nums[cur1] <= nums[cur2]){tmp[i++] = nums[cur1++];}else{tmp[i++] = nums[cur2++];}}while(cur1 <= mid){tmp[i++] = nums[cur1++];}while(cur2 <= r){tmp[i++] = nums[cur2++];}for(int i = l; i <= r; i++){nums[i] = tmp[i-l];}}
};

2.数组中的逆序对

 数组中的逆序对_牛客题霸_牛客网

这题是基于上一题归并排序来做的。 

        要求整个数组的逆序对,我们可以把它划分成两块,先求出这两块内的逆序对组数,然后分别从左右各选出一个组成逆序对。这样就能求出全部的逆序对。在左右两边选择的时候,有两种思路,一种是以右侧某个值为基准,找出左边一大串较大的数,一种是以左边某个值为基础,找出右边一大串较小的数。我们归并排序的两种排序方法(升序和降序)分别对应这两种思路。下面先以升序为例。

        我们联想归并排序的过程。当我们将两个已经排序好的部分内的元素合并时,他们的大小关系有传递性,例如,nums[cur1]右侧的数都比它大,那么当nums[cur1]比nums[cur2]大的时候,这时nums[cur1]右侧所有的元素也就都比nums[cur2]大。那么这样就找出一大串较大值了,它们都以nums[cur2]为右侧较小值。

        而我们只需要在排序的过程中多加一步即可

while(cur1<= mid && cur2 <= r)
        {
            if(nums[cur1] <=  nums[cur2])
            {
                tmp[i++] = nums[cur1++];
            }
            else 
            {
                tmp[i++] = nums[cur2++];
                 ret += mid - cur1 + 1;
            }
        }

 让我们再看看为什么降序的时候不能用这种思路

如图,再升序的情况下我们每次找出左侧较大的数时,会有重复。 

 (用前面我们说过的递归的视角来看的话我们交给这个函数的任务就是,求出这个数组中逆序对的个数并排序)

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型vector * @return int整型*/vector<int> tmp;int InversePairs(vector<int>& nums) {// write code heretmp.resize(nums.size());return mysort(nums, 0, nums.size() - 1)%1000000007;//这里由于题目数据要求,我们要对       //1000000007取余,并且此处和下                                                                                                             //面的取余都必须加,不然会出问题}int mysort(vector<int>& nums, int l, int r){if(l >= r)return 0;int ret = 0;int mid = l + (r - l) / 2;ret += mysort(nums,l, mid);ret += mysort(nums,mid + 1, r);ret %= 1000000007;int cur1 = l, cur2 = mid + 1, i = 0;while(cur1<= mid && cur2 <= r){if(nums[cur1] <=  nums[cur2]){tmp[i++] = nums[cur1++];}else //nums[cur1] >  nums[cur2]{tmp[i++] = nums[cur2++];ret += mid - cur1 + 1;}}while(cur1 <= mid)tmp[i++] = nums[cur1++];while(cur2 <= r)tmp[i++] = nums[cur2++];for(int i = l; i <= r; i++){nums[i] = tmp[i-l];}return ret;}
};

 这里是第二种方法的代码,只需要修改一点点。

while(cur1<= mid && cur2 <= r){if(nums[cur1] >=  nums[cur2]){tmp[i++] = nums[cur1++];ret += r - cur2 + 1;}else {tmp[i++] = nums[cur2++];}}

        可以理解为,当你找到一个较大的nums[cur1]时,如果是升序排序,那么就从左边数组找一串较大的。

        如果是降序排序,那么就从右侧找一串较小的

3.计算右侧小于当前元素的个数

315. 计算右侧小于当前元素的个数 - 力扣(LeetCode)

        宏观来看,我们用一个递归(即归并排序的逻辑),交给我们这个函数的任务是,计算当前数组中每个位置右侧小于当前元素的个数并排序。

         那么我们的整体逻辑就有了,我们要计算一整个数组,第一步可以把它分成两块,分别算算左右两个数组中每个位置右侧小于当前元素的个数,第二步再分别算算以左侧数组中的每个元素为基准,右侧数组中有多少个元素小于这个元素,加上即可。由于我们归并排序在,因此算第二步的时候会容易很多,可以一次性算出很多个。

        题目要求我们返回一个count数组,counts[i] 的值是  nums[i] 右侧小于 nums[i] 的元素的数量。由于我们需要给nums数组排序,所以我们必须再建一个indexarr数组,用于绑定每个数和它的下标。

        我们的nums数组在归并时需要一个临时数组,因此理所当然indexarr数组也需要一个临时数组。

 

         由上面我们可以看出,在归并时,nums[cur1] 和nums[cur2]的值是元素本身,

        而index[cur1] 和index[cur2]是该元素对应下标的值。我们count中每个下标对应的都是nums中元素未经过排序的原始下标,而index中存的也是原始下标

        所以我们这样加即可,count[indexarr[cur1]] += r - cur2 + 1;//这里是最重要的地方

        因为我们的条件判断是 nums[cur1] > nums[cur2],因此我们是count[indexarr[cur1]]加上对应的值。

class Solution {
public:vector<int> tmparr;//nums的辅助数组vector<int> indexarr;vector<int> tmpindexarr;//indexarr的辅助数组vector<int> count;vector<int> countSmaller(vector<int>& nums) {int n = nums.size();tmparr.resize(n);indexarr.resize(n);tmpindexarr.resize(n);count.resize(n);for(int i = 0; i < n; i++)indexarr[i] = i;mysort(nums, 0, n-1);return count;}void mysort(vector<int> & nums, int l, int r){if(l >= r)return;//1.求中间值,数组分块int mid = l + (r - l)/2;//2.处理左右两部分mysort(nums, l, mid);mysort(nums, mid + 1, r);//3.归并逻辑,同时处理一左一右的情况int cur1 = l, cur2= mid + 1, i = 0;while(cur1 <= mid && cur2 <= r){if(nums[cur1] > nums[cur2]){tmpindexarr[i] = indexarr[cur1];tmparr[i] = nums[cur1];count[indexarr[cur1]] += r - cur2 + 1;//这里是最重要的地方i++;cur1++;}else{tmpindexarr[i] = indexarr[cur2];tmparr[i] = nums[cur2];i++;cur2++;}} while(cur1 <= mid){tmpindexarr[i] = indexarr[cur1];tmparr[i++] = nums[cur1++];}while(cur2 <= r){tmpindexarr[i] = indexarr[cur2];tmparr[i++] = nums[cur2++];}for(int j = l; j <= r; j++){nums[j] = tmparr[j - l];indexarr[j] = tmpindexarr[j - l];}}
};

4.翻转对 

493. 翻转对 - 力扣(LeetCode) 

这个题就是逆序对的变种题,只是将判断条件改为 一个大于另一个数的两倍。

所以这道题唯一不同的是,我们需要事先统计翻转对,不能将翻转对的统计和合并一起做了。

我们如果没找到合适的nums[cur1],我们需要将cur1一直++。

while(cur1 <= mid && nums[cur1] / 2.0 <= nums[cur2]) { cur1++; }

因此不能把翻转对的统计和数组的合并放在一起

class Solution {
public:vector<int> tmp;int reversePairs(vector<int>& nums) {tmp.resize(nums.size());return mysort(nums, 0, nums.size()-1);}int mysort(vector<int>& nums, int l, int r){int ret = 0;if(l >= r)return 0;int mid = l + (r - l)/2;ret += mysort(nums, l, mid);ret += mysort(nums, mid + 1, r);int i = 0, cur1 = l, cur2 = mid + 1;while(cur2 <= r){while(cur1 <= mid && nums[cur1] / 2.0 <=  nums[cur2]){cur1++;}if(cur1 > mid)break;ret += mid - cur1 + 1;cur2++;}cur1 = l;cur2 = mid + 1;while(cur1 <= mid && cur2 <= r){if(nums[cur1] <= nums[cur2]){tmp[i++] = nums[cur1++];}else{tmp[i++] = nums[cur2++];}}while(cur1 <= mid){tmp[i++] = nums[cur1++];}while(cur2 <= r){tmp[i++] = nums[cur2++];}for(int i = l; i <= r; i++){nums[i] = tmp[i - l];}return ret;}
};

 

相关文章:

分治(8题)

目录 一、快排 1.颜色分类 2.排序数组 3.数组中的第k个最大元素 4.最小的K个数 二、归并 1. 排序数组 2.数组中的逆序对 3.计算右侧小于当前元素的个数 4.翻转对 一、快排 1.颜色分类 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; left和right&#xff0c;初…...

【9】数据结构的串篇章

目录标题 串的定义顺序串的实现初始化赋值打印串求串的长度复制串判断两个串长度是否相等连接两个串比较两个串内容是否相等插入操作删除操作调试与代码合集 串的模式匹配算法朴素的模式匹配算法KMP算法实现模式匹配 串的定义 定义&#xff1a;由0个或多个字符组成的有限序列&…...

Linux file命令

目录 一. file命令简介二. -b 输出结果不显示文件名三. --mime 输出文件的MIME类型字符串四. 批量确认文件类型4.1 -f 从指定的文件中读取文件路径&#xff0c;显示其文件类型4.2 配合find命令查找确认 一. file命令简介 由于Linux系统并不是像Windows系统那样通过扩展名来定义…...

ARM-UART

时钟选择PLCK,超时3ms自动发送&#xff0c;设置发送8位的缓冲区&#xff0c;且发送中断 设置触发深度&#xff0c;达到8字节将缓冲区数据发憷 中断处理函数...

AFT3 Engine传奇世界AFT3代引擎源码

此AFT3代引擎源码&#xff0c;不是老AFT0330版本&#xff0c;应该是WeiAFT的源码 本源码为新AFT3引擎源码&#xff0c;直接电脑打包出来&#xff0c; 现在市面上使用的AFT3引擎都是用的此款&#xff0c;下载编译即用 链接: https://pan.baidu.com/s/1Zxa64AQ7MUsdV2iIrqiTEg 提…...

[ 3分钟算法 ] | 递归搜索题目 : 翻转链表(递归版)

目录 1. 题目链接&#xff1a; 2. 思路分析&#xff1a; 思路一&#xff1a;从宏观上看 思路二&#xff1a;将链表看成一颗树 3. 代码 1. 题目链接&#xff1a; LCR 024. 反转链表 2. 思路分析&#xff1a; 思路一&#xff1a;从宏观上看 让当前节点后面的链表先逆置&…...

左值与右值,空间与数据

左值是空间&#xff0c;右值是数据 编程总是对“数据”&#xff0c;对"存放数据的空间"操作 a返回一个当前的数据&#xff0c;存放到一个临时空间中&#xff0c;自身的空间中的数据再进行运算 a直接对自身空间中的数据进行运算 其余知识&#xff1a; 1.变量名的意…...

线程池/内存池/mysql连接池

线程池介绍 ①线程池定义&#xff1a; 维持和管理固定数量线程的结构&#xff0c;用于解决资源频繁创建和销毁的问题。 ②线程池组成&#xff1a; 固定数量的线程、队列、任务状态管理。 ④线程池的作用&#xff1a; 避免频繁创建和销毁线程&#xff0c;管理线程状态&…...

图解AUTOSAR_SWS_FlexRayARTransportLayer

FlexRay AUTOSAR 传输层 (FrArTp) 分析 1. AUTOSAR FlexRay 传输层架构 1.1 FlexRay AUTOSAR 传输层在AUTOSAR架构中的位置 AUTOSAR分层架构中,FlexRay AUTOSAR 传输层(FrArTp)位于通信抽象层,其上方是PDU路由器,下方是FlexRay接口。FrArTp的主要功能是实现FlexRay网络上的…...

【百日精通JAVA | SQL篇 | 第四篇】约束

SQL这一块没什么难度&#xff0c;主要是一个熟练度&#xff0c;稍微上点难度的地方&#xff0c;其实在于查&#xff0c;比较复杂&#xff0c;涉及到很多问题。 指定列插入 使用指定列插入的时候&#xff0c;未被指定的列使用默认值进行存储&#xff0c;默认值为空。 默认值设置…...

QEMU源码全解析 —— 块设备虚拟化(16)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(15) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 《KVM实战 —— 原理、进阶与性能调优》—— 任永杰 程舟,机械工业出版社...

实验:IS-IS认证。

一、IS-IS认证的定义与作用分析 ‌IS-IS认证是什么&#xff1f;‌ IS-IS&#xff08;Intermediate System to Intermediate System&#xff09;协议是用于自治系统内部的路由协议&#xff0c;其认证机制主要用于保障路由信息交换的安全性&#xff0c;包括‌邻居关系建立‌和‌…...

11-产品经理-创建产品

在“产品”-“仪表盘”内&#xff0c;可以查看系统中关于产品及相关需求的统计。 在“产品”-“产品列表”页面&#xff0c;可以按项目集、项目查看其关联产品。还可以添加产品、编辑产品线、或者导出产品列表。 产品看板&#xff0c;通过看板方式查看产品、产品计划和产品下的…...

玄机-应急响应-入侵排查

靶机排查目标&#xff1a; 1.web目录存在木马&#xff0c;请找到木马的密码提交 查看/var/www/html。 使用find命令查找 find ./ -type f -name "*.php | xargs grep "eval("查看到1.php里面存在无条件一句话木马。 2.服务器疑似存在不死马&#xff0c;请找…...

MySQL基础知识(通俗版)

MySQL基础知识&#xff08;通俗版&#xff09; 一、MySQL基础概念 1.1 MySQL简介 想象MySQL就像一个超级大的Excel表格&#xff0c;但它比Excel更强大&#xff1a; 可以同时处理成千上万的数据可以保证数据的安全性和一致性可以支持多人同时操作可以自动备份和恢复数据 1.…...

python逆向:喜马拉雅登录案例

网址&#xff1a;登录 1. 点击到网页主页 先随便输入电话号码和密码 打开开发者工具&#xff0c;点击网络清空&#xff0c;然后点击登录发起网络请求 &#xff08;出现一个请求包&#xff0c;我们发现不是我们所需要的&#xff09; 我们进行验证滑块&#xff0c;就又出来请求…...

windows AndroidStudio上传maven中央仓库

一、插件地址&#xff1a;https://github.com/vanniktech/gradle-maven-publish-plugin?tabreadme-ov-file 二、Maven中心&#xff1a;https://vanniktech.github.io/gradle-maven-publish-plugin/central/ 2.1、中央门户帐户&#xff0c;用github账号登陆&#xff1a;gh122…...

嵌入式学习(35)-STM32F103 TXE 和TC

在USART的发送端有2个寄存器&#xff0c;一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志&#xff0c;一个是TXE发送数据寄存器空&#xff0c;另一个是TC发送结束。 当USART_DR中的数据传送到移位寄存器后&#xff0c;TXE被设…...

linux Gitkraken 破解

ubuntu 安装 Gitkraken 9.x Pro 版本_gitcracken.git-CSDN博客...

Qwen-Agent框架的文件相关操作:从Assistant到BasicDocQA

在前面的几篇文章如《针对Qwen-Agent框架的Function Call及ReAct的源码阅读与解析&#xff1a;Agent基类篇》 、《基于Qwen-Agent框架的Function Call及ReAct方式调用自定义工具》、 《针对Qwen-Agent框架的源码阅读与解析&#xff1a;FnCallAgent与ReActChat篇》中&#xff0c…...

2025年3月15日(5mw)

根据《NREL/TP-500-38060技术报告》&#xff0c;NREL 5-MW参考风力机的各部件质量及总体质量数据如下&#xff1a; 各部件质量数据 叶片&#xff08;Blades&#xff09; 单叶片质量&#xff1a;17,740 kg&#xff08;见表2-2&#xff09;总数&#xff1a;3片总质量&#xff1a;…...

docker mysql 笔记250406

docker mysql 笔记250406 以下是使用 Docker 运行 MySQL 的完整指南&#xff0c;包含常见配置和最佳实践&#xff1a; 1. 快速启动 MySQL 容器 docker run -d \--name mysql_db \-e MYSQL_ROOT_PASSWORDmy-secret-pw \-p 3306:3306 \mysql:8.02. 关键配置说明 2.1 环境变量&…...

ceph集群架构阐述

ceph集群架构阐述 ​ 首先&#xff0c;ceph集群也是分为客户端和服务端的&#xff0c;是一种高效的分布式存储系统&#xff0c;我们将其拆分为这两个部分来进行分析。 ​ 我大致的将服务端分为API类型、逻辑层、OSD层三个层面进行分析&#xff1b;将客户端按三种API类型挂载、…...

《Java八股文の文艺复兴》第十篇:量子永生架构——对象池的混沌边缘

目录 卷首语&#xff1a;蝴蝶振翅引发的量子海啸 第一章&#xff1a;混沌初开——对象池的量子涅槃&#xff08;深度扩展&#xff09; 第二章&#xff1a;混沌计算——对象复活的降维打击&#xff08;技术深化&#xff09; 第三章&#xff1a;量子试炼场——亿万级对象池全…...

(linux操作系统)程序地址空间

程序地址空间是什么&#xff1f; 讲这个问题之前&#xff0c;我们先来看一段熟悉的代码&#xff0c;以前学习C语言或者C语言时&#xff0c;就听说过程序内存分布&#xff0c;堆区&#xff0c;栈区&#xff0c;静态区&#xff0c;常量区&#xff0c;共享区&#xff0c;代码段&am…...

专业抑郁测试工具:让心理健康评估更简单

专业抑郁测试工具&#xff1a;让心理健康评估更简单 在这个快节奏的社会中&#xff0c;心理健康问题越来越受到人们的关注。为了帮助大家更好地了解自己的心理状态&#xff0c;我们开发了一款专业的在线抑郁测试工具。这个工具基于科学的心理量表设计&#xff0c;为用户提供准…...

C语言中单向链表:创建节点与插入新节点

一. 简介 单链表是一种常见且基础的数据结构&#xff0c;由一系列节点组成&#xff0c;每个节点包含数据和一个指向下一个节点的指针。 本文简单学习一下C语言中如何实现单项链表。 二. C语言实现单向链表 单向链表&#xff1a;单向链表是一种线性数据结构&#xff0c;由一…...

jsoncpp的使用

json提供的几个类&#xff1a; Value类&#xff1a;将json支持的数据类型进行包装&#xff0c;最终得到一个Value类型 FastWriter类&#xff1a;将Value对象中的数据序列化为字符串&#xff0c;序列化后可以得到json格式的字符串 Reader类&#xff1a;反序列化&#xff0c;将…...

【最新版】啦啦外卖v64系统独立版源码+全部小程序APP端+安装教程

一.系统介绍 啦啦外卖跑腿平台独立版&#xff0c;使用的都知道该系统功能非常强大&#xff0c;应该说是目前外卖平台功能最全的一套系统。主要是功能非常多&#xff0c;拿来即用&#xff0c;包括客户端小程序、配送端小程序、商户端小程序&#xff0c;还有对应四个端的APP源码…...

13-产品经理-产品多分支平台管理

禅道16.0版本开始&#xff0c;优化和增强了产品的分支/平台功能&#xff0c;主要特点如下&#xff1a; 多分支/平台功能兼容各种大小型项目&#xff0c;项目/迭代可以关联对应产品的某个分支/平台。分支/平台支持灵活管理&#xff0c;可以把分支/平台理解为时间层面的概念&…...

AI在医疗领域的应用

人工智能对医疗领域的革命性影响 一、智能诊断系统的突破 病理识别准确率提升乳腺癌检测准确率达94.6%(2023《Nature Medicine》)皮肤癌诊断灵敏度超过专业医师12%多模态诊断整合融合CT/MRI影像+基因组数据+电子病历急性肾损伤预测提前48小时(DeepMind)二、药物研发范式革…...

LabVIEW 在故障诊断中的算法

在故障诊断领域&#xff0c;LabVIEW 凭借其强大的图形化编程能力、丰富多样的工具包以及卓越的功能性能&#xff0c;成为工程师们进行故障诊断系统开发的得力助手。通过运用各种算法&#xff0c;能够对采集到的信号进行全面、深入的分析处理&#xff0c;从而准确地诊断出系统中…...

(自用)WebSocket创建流程

在Spring Boot项目中新建WebSocket服务&#xff0c;可以按照以下详细步骤进行操作&#xff1a; 1.创建Spring Boot项目 可以通过Spring Initializr&#xff08;<>&#xff09;快速创建一个新的Spring Boot项目&#xff0c;添加Spring Web和Spring Boot DevTools依赖&…...

C++多线程编码二

1.lock和try_lock lock是一个函数模板&#xff0c;可以支持多个锁对象同时锁定同一个&#xff0c;如果其中一个锁对象没有锁住&#xff0c;lock函数会把已经锁定的对象解锁并进入阻塞&#xff0c;直到多个锁锁定一个对象。 try_lock也是一个函数模板&#xff0c;尝试对多个锁…...

【最新版】金媒婚恋系统v10.5最新稳定开源+原生前端小程序 PC端+安装教程

一.系统简介 1. 红娘服务 红娘服务模块是该系统的一大特色。专业红娘会通过分析用户的个人资料和偏好&#xff0c; 为用户提供精准的配对建议和个性化服务。用户可以预约红娘服务&#xff0c;通过红娘的介入&#xff0c;提升配对成功率。 2. 相亲活动 相亲活动模块用于组织和管…...

[spring] spring AOP - 面向切面编程の学习

[spring] spring AOP - 面向切面编程の学习 几年前开始还在被 spring 的八股文时&#xff0c;AOP 就是一个比较热也比较大的点&#xff0c;为了面试确实背过不少&#xff0c;不过 AOP 实现本身做的不多&#xff0c;一方面也是因为 AOP 一旦配置好了基本上就不需要改什么&#…...

JavaScript 中的 Reflect 详解

Reflect 是 ES6引入的一个内置对象&#xff0c;它提供了一系列静态方法来操作对象&#xff0c;这些方法与 Proxy 处理器方法一一对应。Reflect 的设计目的是为了更优雅地操作对象&#xff0c;并统一某些操作的行为。 1. Reflect 的基本特点 1. 不是构造函数&#xff1a;不能使…...

【操作系统】linux常用命令

UP作为一个Linux系统练习两年半的个人练习生&#xff0c;今天分门别类地给大家整理一下常用的Linux命令&#xff0c;祝大家在Linux练习之路一帆风顺。 文件和目录操作 文件查看与编辑 文件查找 文件权限与所有权 进程管理 系统信息与监控 网络管理与诊断...

002 vue组件化编程

文章目录 一般方式全局组件局部组件 组件&#xff08;Component&#xff09;是Vue.js最强大的功能之一 组件也是一个Vue实例&#xff0c;也包括&#xff1a;data、methods、生命周期函数等 组件渲染需要html模板&#xff0c;所以增加了template属性&#xff0c;值就是HTML模板 …...

常见的 JavaScript 框架和库

在现代前端开发中&#xff0c;JavaScript框架和库成为了构建高效、可维护应用程序的关键工具。本文将介绍四个常见的JavaScript框架和库&#xff1a;React、Vue.js、Angular 和 Node.js&#xff0c;并探讨它们的特点、使用场景及适用场合。 1. React — 构建用户界面的JavaScri…...

005_循环结构

循环结构 循环结构的作用和应用场景for循环while循环for和while的使用规范do - while 死循环循环嵌套break、continueRandom生成随机数 循环结构的作用和应用场景 减少代码的重复编写、灵活的控制程序的执行 for循环 for (1初始化语句; 2循环条件; 3迭代语句){4循环体语句(重…...

1110+款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100+ Icons Easily Customize

1110款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100 Icons Easily Customize 产品特点 — 24 x 24 px 网格大小 — 2px 线条描边 — 所有形状都是基于矢量的 — 平滑和圆角 — 易于更改颜色 类别 &#x1f6a8; 警报和反馈 ⬆️ 箭头 &…...

leetcode 368. 最大整除子集 中等

给你一个由 无重复 正整数组成的集合 nums &#xff0c;请你找出并返回其中最大的整除子集 answer &#xff0c;子集中每一元素对 (answer[i], answer[j]) 都应当满足&#xff1a; answer[i] % answer[j] 0 &#xff0c;或answer[j] % answer[i] 0 如果存在多个有效解子集&…...

项目总结之常问的一些问题

1.项目功能介绍&#xff0c;重难点 重难点&#xff1a; mock工具使用&#xff08;涉及到的三方接口过多&#xff0c;由于网络等原因无法调通&#xff0c;所以测试的时候&#xff0c;采用mock工具来模拟返回接口真正调用后响应数据&#xff09; 2.项目负责哪部分&#xff1f;…...

51单片机实现精确定时

一、51单片机代码 #include <reg52.h>sbit LED P3^3;extern bit b10Ms; extern bit b100Ms; extern bit b1S; extern bit b10S;void Timer0_Init() {TMOD | 0x01; // 设置定时器0为模式1TH0 (65536 - 1000) / 256; // 高8位赋初值TL0 (65536 - 1000) % 256; // 低8位…...

记一次不太顺利的Docker重装

#记录工作 一、前言 默认情况下&#xff0c;Windows系统上Docker Desktop 安装在 &#xff1a;C:\Program Files\Docker\Docker&#xff1b; 目前正常下载能下载到最新版本是到v4.39.0&#xff0c;实际已经能找到v4.40.0版本来进行修复安装&#xff1b; 建议尽量不要改变Doc…...

【计网】TCP 协议详解 与 常见面试题

三次握手、四次挥手的常见面试题 不用死记&#xff0c;只需要清楚三次握手&#xff0c;四次挥手的流程&#xff0c;回答的时候心里要记住&#xff0c;假设网络是不可靠的 问题(1)&#xff1a;为什么关闭连接时需要四次挥手&#xff0c;而建立连接却只要三次握手&#xff1f; 关…...

Docker介绍

Docker介绍 Docker 本身并不是容器&#xff0c;而是一个使用容器的工具。容器是 Linux 内核提供的技术&#xff0c;Docker 只是将这种技术的使用简便化了。Docker 的主要目标是 “Build,Ship and Run Any APP,Anywhere”&#xff08;“一次封装&#xff0c;到处运行”&#xf…...

大模型推理--Qwen2.5-Omni在A100上的初体验

过去的一周Qwen2.5-Omni产生了很高的热度&#xff0c;吸引了很多人的目光。它的多模态确实很吸引人&#xff0c;放出来的demo体验还算尚可&#xff08;语音对话的延迟还是太大&#xff09;&#xff0c;所以就在A100 PCIe上实地部署了一下&#xff0c;初步对其速度进行了测试&am…...

二分查找例题

本篇基于b站灵茶山艾府。 34. 在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你…...