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

算法基础—二分算法

目录

一、⼆分查找例题

1 牛可乐和魔法封印

2 A-B 数对

3 烦恼的高考志愿

二、 ⼆分答案

1 木材加⼯

2 砍树

3 跳石头


⼆分算法的原理以及模板其实是很简单的,主要的难点在于问题中的各种各样的细节问题。因此,⼤多数情况下,只是背会⼆分模板并不能解决题目,还要去处理各种乱七⼋糟的边界问题。

【案例】

题⽬来源: ⼒扣

题⽬链接: 34. 在排序数组中查找元素的第⼀个和最后⼀个位置

难度系数: ★★

【题⽬描述】

给你⼀个按照⾮递减顺序排列的整数数组 nums ,和⼀个⽬标值 target 。请你找出给定⽬标值

在数组中的开始位置和结束位置。

如果数组中不存在⽬标值 target ,返回 [-1, -1] 。

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题

【解法】

解法一:暴力解法->从前往后扫描数组(慢在没有利用数组有序的特征)

解法二:二分算法

解决时的细节问题(因题目而异):

1.while循环里面的判断如何写:while(left <right)/while(left <=right);

2.求中点的方法:(left + right)/2 / (left + right+1)/2;

3.二分结束后,相遇点的情况:需要判断一下,循环结束后,是否是我们想要的结果;

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int n = nums.size();//处理边界情况if(n == 0) return {-1,-1};//1.求起始位置int left = 0,right = n - 1;while(left < right){int mid = (left + right) / 2;if(nums[mid] >= target) right = mid;else left = mid + 1;}if(nums[left] != target) return{-1,-1};int retleft = left;//2.求终止位置left = 0,right = n-1;while(left < right){int mid = (left + right + 1) / 2;if(nums[mid] <= target) left = mid;else right = mid - 1;}return {retleft,left};}
};

【算法原理】

当我们的解具有⼆段性时,就可以使⽤⼆分算法找出答案:

  • 根据待查找区间的中点位置,分析答案会出现在哪⼀侧;
  • 接下来舍弃⼀半的待查找区间,转⽽在有答案的区间内继续使⽤⼆分算法查找结果

【模板】

⼆分的模板在⽹上⾄少能搜出来三个以上。但是,我们仅需掌握⼀个,并且⼀直使⽤下去即可。

// ⼆分查找区间左端点
int l = 1, r = n;
while(l < r)
{int mid = (l + r) / 2;if(check(mid)) r = mid;else l = mid + 1;
}
// ⼆分结束之后可能需要判断是否存在结果
/ ⼆分查找区间右端点
int l = 1, r = n;
while(l < r)
{int mid = (l + r + 1) / 2;if(check(mid)) l = mid;else r = mid - 1;
}
// ⼆分结束之后可能需要判断是否存在结果

 为了防止溢出,求中点时可以使用:mid = left + (right - left) / 2

【⼆分问题解决流程】

1. 先画图分析,确定使⽤左端点模板还是右端点模板,还是两者配合⼀起使⽤;

2. ⼆分出结果之后,不要忘记判断结果是否存在,⼆分问题细节众多,⼀定要分析全⾯。

【STL 中的⼆分查找】

<algorithm>

1. lower_bound :⼤于等于 x 的最⼩元素,返回的是迭代器;时间复杂度: O(log N) 。

2. upper_bound :⼤于 x 的最⼩元素,返回的是迭代器。时间复杂度: O(log N) 。

⼆者均采⽤⼆分实现。但是 STL 中的⼆分查找只能适⽤于"在有序的数组中查找",如果是⼆分答案就不能使⽤。因此还是需要记忆⼆分模板

一、⼆分查找例题

1 牛可乐和魔法封印

题⽬来源: ⽜客⽹

题⽬链接: ⽜可乐和魔法封印

难度系数: ★★

【解法】

解法一:暴力解法->从前往后扫描一遍(O(n*q))

解法二:二分算法

1.找到大于等于x的起始位置

2.找到小于等于y的终止位置

【参考代码】

#include<iostream>
using namespace std;
const int N = 1e5;
int a[N];
int n,q;
int main()
{cin >> n;for(int i = 1;i <= n;i++) cin >> a[i];cin >> q;while(q--){int x,y;cin >> x >> y;//大于等于x的最小元素int left = 1,right = n;while(left < right){int mid = (left + right) / 2;if(a[mid] >= x) right = mid;else left = mid + 1;}if(a[left] < x){cout << 0 << endl;continue;}int retleft = left;//小于等于y的最大元素left = 1,right = n;while(left < right){int mid = (left + right + 1) / 2;if(a[mid] <= y) left = mid;else right = mid - 1;}if(a[left] > y){cout << 0 << endl;continue;}cout << left - retleft + 1 << endl;}return 0;
}

    2 A-B 数对

    题⽬来源: 洛⾕

    题⽬链接:A-B 数对

    难度系数: ★

     【解法】

    分析可得到:

    性质一:元素的顺序是不影响最终结果的

    1. 可以先把整个数组排序
    2. 把A-B=C变形成B=A-C通过枚举A,然后查找有多少个B

    【参考代码】

    #include<iostream>
    #include<algorithm>
    using namespace std;typedef long long LL;
    const int N = 2e5 + 10;
    LL a[N];
    LL n,c;int main()
    {cin >> n >> c;for(int i = 1;i <= n;i++)cin >> a[i];sort(a+1,a+n+1);LL ret = 0;for(int i = 2;i <=n;i++){LL b = a[i] - c;ret += upper_bound(a+1,a+i,b) - lower_bound(a+1,a+i,b);}cout << ret << endl;return 0;
    }
    //其实此题的最优解是哈希表 题解如下:
    // #include<iostream>
    // #include<unordered_map>
    // using namespace std;// const int N = 2e5 + 10;
    // typedef long long LL;
    // LL a[N];
    // unordered_map<LL,LL> mp;
    // LL sum;
    // int main(){
    // 	LL n,c;cin >> n >> c;
    // 	for(LL i = 1;i <= n;i++){
    // 		cin >> a[i];
    // 		mp[a[i]]++;
    // 	}
    // 	for(int i = 1;i <= n;i++){
    // 		sum += mp[a[i] + c];
    // 	}
    // 	cout << sum << endl;
    // 	return 0;
    // }

    3 烦恼的高考志愿

    题⽬来源: 洛⾕

    题⽬链接: P1678 烦恼的⾼考志愿

    难度系数: ★★

    【解法】

    分析题意:给点一个数b,然后在数组中找出离b最近的那个数

    解法一:利用set来解决

    解法二:排序+二分(找出大于等于B的最小的元素的位置)

    【参考代码】

    #include<iostream>
    #include<algorithm>
    using namespace std;typedef long long LL;
    const int N = 1e5 + 10;
    LL a[N];
    int m,n;
    LL ret;
    int main()
    {cin >> m >> n;for(int i = 1;i <= m;i++) cin >> a[i];sort(a,a+m+1);a[0] = -1e7 + 10;for(int i = 1;i <= n;i++){LL x;cin >> x;int left = 1,right = m;while(left < right){int mid = (left + right) / 2;if(a[mid] >= x) right = mid;else left = mid + 1;}ret += min(abs(a[left]-x),abs(a[left-1]-x));}cout << ret << endl;return 0;
    }

    二、 ⼆分答案

    准确来说,应该叫做「⼆分答案 + 判断」。

    ⼆分答案可以处理⼤部分「最⼤值最⼩」以及「最⼩值最⼤」的问题。如果「解空间」在从⼩到⼤的「变化」过程中,「判断」答案的结果出现「⼆段性」,此时我们就可以「⼆分」这个「解空间」,通过「判断」,找出最优解。

    刚接触的时候,可能觉得这个「算法原理」很抽象。没关系, 道题的练习过后,你会发现这个「⼆分答案」的原理其实很容易理解,重点是如何去「判断」答案的可⾏性

    1 木材加⼯

    题⽬来源: 洛⾕

    题⽬链接: P2440 ⽊材加⼯

    难度系数: ★★

    【解法】

    解法一:暴力解法(这个解法的时间复杂度O(n*L)->1e13,会超时)

    • 枚举所有的切割长度x
    • 求出在x的情况下,能切出来多少段->C
    • 找出C>=k的情况下,最大的x

    解法二:利用二分来优化

    x表示:切割出来的小段长度

    c表示:在x的基础下,最多能切出来多少段

    k表示:最终要切出来的段数

    根据题意,可以发现如下性质,:

    • 当 x 增⼤的时候, c 在减⼩。也就是最终要切成的⻓度越⼤,能切的段数越少;
    •  当 x 减⼩的时候, c 在增⼤。也就是最终要切成的⻓度越⼩,能切的段数越多。

    那么在整个「解空间」里面,设最终的结果是 ret ,于是有:

    • 当x ≤ ret 时,c ≥ k 。也就是「要切的⻓度」⼩于等于「最优⻓度」的时候,最终切出来的段数「⼤于等于」k;
    • 当 x > ret时,c < k 。也就是「要切的⻓度」⼤于「最优⻓度」的时候,最终切出来的段数「⼩于」k ;

    在解空间中,根据 的位置,可以将解集分成两部分,具有「⼆段性」,那么我们就可以「⼆分答案」。

    当我们每次⼆分⼀个切成的⻓度 x 的时候,如何算出能切的段数 c ?

    • 很简单,遍历整个数组,针对每⼀根⽊头,能切成的段数就是 a[i] / x 。

    【参考代码】

    #include<iostream>
    using namespace std;typedef long long LL;
    const int N = 1e5 + 10;
    LL a[N];
    int n,k;//当切割长度为mid的时候,最多能切出来多少段 
    LL calc(int mid)
    {LL c = 0;for(int i = 1;i <= n;i++){c += a[i] / mid;}return c;
    }
    int main()
    {cin >> n >> k;LL m = 0;for(int i = 1;i <= n;i++){cin >> a[i];m = max(m,a[i]);}LL left = 0,right = m;while(left < right){LL mid = (left + right + 1) / 2;if(calc(mid) >= k) left = mid;else right = mid - 1;}cout << left << endl;return 0;
    }

    2 砍树

    题⽬来源: 洛⾕

    题⽬链接:P1873 [COCI 2011/2012 #5] EKO / 砍树

    难度系数: ★★

    【解法】

    H表示:伐木机的高度

    C表示:当伐木机的高度为h的时候,所能获得的木材

    • 当 H 增⼤的时候, C 在减⼩;
    • 当 H 减⼩的时候, C 在增⼤。

    那么在整个「解空间」⾥⾯,设最终的结果是 ret ,于是有:

    当H<=ret 时 ,C>=M 。也就是「伐⽊机的⾼度」⼤于等于「最优⾼度」时,能得到的⽊材「⼩于等于」M ;

    当H>ret 时,C < M 。也就是「伐⽊机的⾼度」⼩于「最优⾼度」时,能得到的⽊材「⼤于」M 。

    在解空间中,根据 的位置,可以将解集分成两部分,具有「⼆段性」,那么我们就可以「⼆分答案」。
    当我们每次⼆分⼀个伐⽊机的⾼度 H 的时候,如何算出得到的⽊材 C ?

    • 很简单,遍历整个数组,针对每⼀根⽊头,能切成的⽊材就是 a[i] - H

    【参考代码】

    #include<iostream>
    using namespace std;
    typedef long long LL;
    const int N = 1e6 + 10;
    LL a[N];
    int n,m;// 当伐木机的高度为 x 时,所能获得的木材
    LL calc(int x)
    {LL c = 0;for(int i = 1;i <= n;i++){if(a[i] > x) c += a[i] - x;}return c;
    }
    int main()
    {cin >> n >> m;LL maxh = 0;for(int i = 1;i <= n;i++){cin >> a[i];maxh = max(maxh,a[i]);}LL left = 1,right = maxh;while(left < right){LL mid = (left + right + 1) / 2;if(calc(mid) >= m) left = mid;else right = mid - 1;}cout << left << endl;return 0;
    }

    3 跳石头

    题⽬来源: 洛⾕

    题⽬链接: P2678 [NOIP2015 提⾼组] 跳⽯头

    难度系数: ★★

    【解法】

    x表示:最短的跳跃距离

    c表示:在跳跃距离为x的情况下,移走的岩石

    根据题意,我们可以发现如下性质:

    • 当 x 增⼤的时候, c 也在增⼤;
    • 当 x 减⼩的时候, c 也在减⼩。

    那么在整个「解空间」⾥⾯,设最终的结果是 ret ,于是有:

    • 当 时x ≤ ret,c ≤ M。也就是「每次跳的最短距离」⼩于等于「最优距离」时,移⾛的⽯头块数「⼩于等于」M ;
    • 当 时x > ret,c > M。也就是「每次跳的最短距离」⼤于「最优距离」时,移⾛的⽯头块数「⼤于」 M。

    在解空间中,根据ret 的位置,可以将解集分成两部分,具有「⼆段性」,那么我们就可以「⼆分答案」。

    当我们每次⼆分⼀个最短距离 x 时,如何算出移⾛的⽯头块数 c ?

    • 定义前后两个指针 i, j 遍历整个数组,设 i ≤ j ,每次 j 从 i 的位置开始向后移动;
    • 当第⼀次发现 a[j] - a[i] ≥ x 时,说明 [i + 1, j - 1] 之间的⽯头都可以移⾛;
    • 然后将 i 更新到 j 的位置,继续重复上⾯两步。

    【参考代码】

    #include<iostream>
    using namespace std;const int N = 5e4 + 10;
    int a[N];
    int l,n,m;
    //当最短跳跃距离为x时,移走的岩石数目 
    int calc(int x)
    {int ret = 0;for(int i = 0;i <= n;i++){int j = i + 1;while(j <= n && a[j] - a[i] < x) j++;ret += j - i -1;i = j - 1;}return ret;
    }
    int main()
    {cin >> l >> n >> m;for(int i = 1;i <= n;i++) cin >> a[i];a[n+1] = l;n++;int left = 1,right = l;while(left < right){int mid = (left + right + 1) / 2;if(calc(mid) <= m) left = mid;else right = mid - 1;}cout << left << endl;return 0;} 
    

    相关文章:

    算法基础—二分算法

    目录 一、⼆分查找例题 1 牛可乐和魔法封印 2 A-B 数对 3 烦恼的高考志愿 二、 ⼆分答案 1 木材加⼯ 2 砍树 3 跳石头 ⼆分算法的原理以及模板其实是很简单的&#xff0c;主要的难点在于问题中的各种各样的细节问题。因此&#xff0c;⼤多数情况下&#xff0c;只是背会…...

    2024年第十五届蓝桥杯CC++大学A组--成绩统计

    2024年第十五届蓝桥杯C&C大学A组--成绩统计 题目&#xff1a; 动态规划&#xff0c; 对于该题&#xff0c;考虑动态规划解法&#xff0c;先取前k个人的成绩计算其方差&#xff0c;并将成绩记录在数组中&#xff0c;记录当前均值&#xff0c;设小蓝已检查前i-1个人的成绩&…...

    家居实用品:生活中的艺术,家的温馨源泉‌

    在快节奏的现代生活中&#xff0c;家居实用品不仅是日常所需的工具&#xff0c;更是营造温馨家居氛围、提升生活品质的关键元素。它们以其独特的魅力&#xff0c;默默地融入我们的日常生活&#xff0c;成为连接物质世界与精神世界的桥梁。 走进家门&#xff0c;首先映入眼帘的或…...

    TCP重传率高与传输延迟问题

    目录标题 排查步骤&#xff1a;TCP重传率高与传输延迟问题v1.0通过 rate(node_netstat_Tcp_RetransSegs[3m]) 排查 TCP 重传问题的步骤1. **指标含义与初步分析**2. **关联指标排查**3. **定位具体问题源**4. **解决方案**5. **验证与监控** v2.0一、基础检查二、网络层分析三、…...

    超越简单检索:探索知识图谱与大型语言模型的协同进化之路

    摘要: 大型语言模型&#xff08;LLM&#xff09;在自然语言处理领域取得了革命性进展&#xff0c;但其在事实准确性、复杂推理和可解释性方面仍面临挑战&#xff0c;“幻觉”现象是其固有局限性的体现。知识图谱&#xff08;KG&#xff09;作为结构化人类知识的载体&#xff0c…...

    汽车的四大工艺

    文章目录 冲压工艺核心流程关键技术 焊接工艺核心流程 涂装工艺核心流程 总装工艺核心流程终检与测试静态检查动态检查四轮定位制动转鼓测试淋雨测试总结 简单总结下汽车的四大工艺&#xff08;从网上找了一张图&#xff0c;感觉挺全面的&#xff09;。 冲压工艺 将金属板材通过…...

    研发效能实践:技术评审会生存指南

    文章目录 &#x1f6a8;‌开篇暴击&#xff1a;为什么你的评审会像「菜鸡互啄」&#xff1f;‌⚙️‌第一章&#xff1a;Google Design Sprint——5天把争议变成共识‌&#x1f4c5; ‌Day 1-5 实操手册‌‌Map the Problem&#xff08;画地图&#xff09;‌‌Sketch Solutions…...

    js 拷贝

    在 JavaScript 中&#xff0c;拷贝对象和数组时需要特别注意&#xff0c;因为对象和数组是引用类型&#xff0c;直接赋值只会复制引用&#xff0c;而不是实际的数据。以下是几种常见的拷贝方法及其应用场景&#xff1a; 1. 浅拷贝&#xff08;Shallow Copy&#xff09; 浅拷贝…...

    AI比人脑更强,因为被植入思维模型【51】效率思维模型

    giszz的理解&#xff1a;效率实际没有用&#xff0c;过分的追求效率&#xff0c;也是当下社会的弊病。但是效率思维&#xff0c;让我们能够用一个最简单的模型&#xff0c;去平衡投入和产出的最佳比例。过高的效率&#xff0c;会导致过大的压力&#xff0c;合适是最好的。 一、…...

    Spark RDD相关概念

    Spark运行架构与核心组件 1.Spark运行梁构 spark运行架构包括master和slave两个主要部分。master负责管理整个集群的作业任务调度&#xff0c;而slave则负责实际执行任务。 dirver是Spark驱动器节点&#xff0c;负责执行Spark任务中的main方法&#xff0c;将用户程序转换成作业…...

    每日一题(小白)数组娱乐篇21

    由于题意可知我们是要将对应的数字转换为英文&#xff0c;我们要考虑两点一个是进制的转换&#xff0c;也就是类似于我们的十进制一到9就多一位&#xff0c;这里的进制就是Z进制也就是27进制一旦到26下一位则进位&#xff1b;另一方面要考虑数字的转换也就是1~26对应A~Z。解决上…...

    LLM 的model.generate() 参数说明

    LLM 的model.generate() 参数说明 目录 LLM 的model.generate() 参数说明生成长度控制参数采样策略参数重复惩罚参数束搜索参数其他参数model.generate() 方法是 Hugging Face Transformers 库中用于文本生成的核心方法,它有众多参数可用于控制生成过程 生成长度控制参数 min…...

    每日一题——AB10 反转链表

    ListNode* prev NULL;while(head) {ListNode* next head->next; // 先记住下一个节点head->next prev; // 把当前节点指向前一个prev head; // 前一个节点变成当前节点head next; // 当前节点移动到下一个}return prev; // …...

    大模型备案语料安全要求解析

    根据大模型备案法规要求及实践经验&#xff0c;我整理除了以下涉及到语料安全相关环节的要求&#xff0c;供大家参考&#xff0c;如果有大模型备案和算法备案的更多疑问&#xff0c;也可以和我沟通交流。 一、关键词库规模与覆盖范围 1.基础规模 企业需建立拦截关键词库&…...

    【Ansible自动化运维】二、Playbook 深入探究:构建复杂自动化流程

    ​ 在 Ansible 自动化运维体系中&#xff0c;Playbook 是极为关键的部分。它允许我们以一种结构化、可重复的方式定义和执行一系列复杂的任务&#xff0c;从而构建高效的自动化流程。本篇文章将深入探究 Ansible Playbook 的各个方面&#xff0c;助您掌握构建复杂自动化…...

    unity 保存场景功能 可以保存运行时候地形变化和动态生成得物体,点击加载进来后可以继续上次退出时得场景

    直接上代码了 using System; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.UI;[System.Serializable] public class TerrainSaveData {public int heightmapResolution;public float terrainWidth;public float terrainLength;p…...

    光谱相机的关键技术参数

    光谱相机的关键技术参数直接影响其数据获取能力和应用场景适配性。以下是核心参数的详细解析&#xff0c;涵盖光谱性能、空间性能、硬件性能及环境适应性&#xff1a; 一、光谱性能参数‌ ‌1. 光谱范围&#xff08;Spectral Range&#xff09;‌ ‌定义‌&#xff1a;相机可…...

    Linux系统管理与编程12: FTP服务配置

    (本实验在CentOS7/8上完成&#xff0c;OpenEuler上暂时未实现) 兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1 实验目标 1)理解FTP服务器原理 2) 掌握FTP服务器的配置文件 3)具备安装部署VSFTP的能力 4) 具备FTP的故障排除能…...

    乐观锁与悲观锁的使用场景

    悲观锁的应用场景 悲观锁的基本思想是假设并发冲突会发生&#xff0c;因此在操作数据时会先锁定数据&#xff0c;直到完成操作并提交事务后才释放锁。这种方式适用于写操作较多、并发冲突可能性较高的场景。 高写入比例的数据库操作&#xff1a;如果系统中有很多写操作&#x…...

    金融级隐私安全之DeepSeek R1 模型去中心化存储和推理实现方案

    目录 DeepSeek R1 进入去中心化存储网络意味着什么? 它是如何工作的? Atoma、Walrus和 Sui Atoma Network 已成功将 DeepSeek R1 670B 参数推理模型上传到 Walrus 去中心化存储网络。这标志着这种规模的模型首次在去中心化存储层上可用,确保无需依赖中心化基础设施即可实…...

    基于django大数据平台的交通数据可视化设计与实现(源码+lw+部署文档+讲解),源码可白嫖!

    摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;基于大数据平台的交通数据可视化系统当然不能排除在外。基于大数据平台的交通数据可视化系统是在实际应用和软件工程的开发原理之上&#…...

    STM32 vs ESP32:如何选择最适合你的单片机?

    引言 在嵌入式开发中&#xff0c;STM32 和 ESP32 是两种最热门的微控制器方案。但许多开发者面对项目选型时仍会感到困惑&#xff1a;到底是选择功能强大的 STM32&#xff0c;还是集成无线的 ESP32&#xff1f; 本文将通过 硬件资源、开发场景、成本分析 等多维度对比&#xf…...

    柳宗元经典的10首唐诗

    1、最孤独的诗&#xff1a;《江雪》 江雪 千山鸟飞绝&#xff0c;万径人踪灭。 孤舟蓑笠翁&#xff0c;独钓寒江雪。 这首诗被誉为“唐诗五绝最佳”之作。 富于理想的“永贞革新”失败后&#xff0c;柳宗元被贬永州&#xff0c;母亲也在半年后离世。年届三十&#xff0c;政…...

    Windows11介绍(中英文版)

    一、Windows 11 的发布背景与发展历程 Windows 11 是微软公司推出的一款重要的操作系统&#xff0c;它是 Windows 操作系统系列的最新版本之一。微软在操作系统领域拥有悠久的历史和丰富的经验&#xff0c;从早期的 Windows 95 开启了图形化操作系统的新时代&#xff0c;到 Wi…...

    使用 VSCode 本地历史记录‌恢复误删除文件

    vsCode未知操作意外删除项目根目录入口代码文件 使用vsCode多年&#xff0c; 第一次遇见这种情况&#xff0c; 只是下载了几个插件&#xff0c; 可能打开的窗口太多&#xff0c; 有几个代码版本比对的页面&#xff0c; 在没有察觉的时候&#xff0c; 意外删除了项目根目…...

    前端面试宝典---数据类型

    基本数据类型 对于基本类型在创建时无需使用 new 关键字 Bigint在实际开发不常用&#xff0c;如果对于精度要求高可以使用第三方库&#xff0c;如decimal.js 基本数据类型介绍 undefined&#xff1a;当变量被声明但未赋值&#xff0c;或者函数没有返回值时&#xff0c;就会呈现…...

    Dinky 和 Flink CDC 在实时整库同步的探索之路

    摘要&#xff1a;本文整理自 Dinky 社区负责人&#xff0c;Apache Flink CDC contributor 亓文凯老师在 Flink Forward Asia 2024 数据集成&#xff08;二&#xff09;专场中的分享。主要讲述 Dinky 的整库同步技术方案演变至 Flink CDC Yaml 作业的探索历程&#xff0c;并深入…...

    【Proteus仿真】【32单片机-A008】MPX4115压力检测系统设计

    目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、压力检测与LCD显示 2、超过上限&#xff0c;降压模块启动 3、压力检测范围15kpa-115kpa 4、压力阈值设置 5、超限报警 二、使用步骤 系统运行后&#xff0c;LCD160…...

    银河麒麟系统虚拟机网络ping不通的解决方法

    问题描述&#xff1a;使用NAT模式搭建了银河麒麟系统虚拟主机&#xff0c;虚拟机内部可以联网&#xff0c;可以查询到具体的ip地址&#xff0c;同时也可以在虚拟机内部ping同宿主机ip&#xff0c;但使用宿主机却无法ping同银河麒麟虚拟机ip&#xff0c;使用ssh、ftp、sftp等工具…...

    spark数据清洗案例:流量统计

    一、项目背景 在互联网时代&#xff0c;流量数据是反映用户行为和业务状况的重要指标。通过对流量数据进行准确统计和分析&#xff0c;企业可以了解用户的访问习惯、业务的热门程度等&#xff0c;从而为决策提供有力支持。然而&#xff0c;原始的流量数据往往存在格式不规范、…...

    关于AIGC stable diffusion 在图像超分上的算法整理

    参考文档&#xff1a; c论文阅读基于Stable Diffusion的图像超分 - 知乎 十分钟读懂Stable Diffusion运行原理 - 知乎 1.difussion model 扩散模型的基本原理 diffusion model 扩散模型是一类生成模型的统称&#xff0c;基于扩散过程生成数据。这类模型的核心是通过逐步加噪…...

    Stable Diffusion ComfyUI 基础教程(一) ComfyUI安装与常用插件

    前言&#xff1a; 相信大家玩 Stable Diffusion&#xff08;以下简称SD&#xff09;都是用的 web UI 操作界面吧&#xff0c;不知道有没有小伙伴听说过 ComfyUI。ComfyUI 是 一个基于节点流程的 Stable Diffusion 操作界面&#xff0c;可以通过流程&#xff0c;实现了更加精准…...

    [leetcode]差分算法

    一.差分算法性质 1.1计算差分数组&#xff1a; b[i] a[i] - a[i - 1] 1.2差分数组的性质 1.2.1对差分数组的每一项作前缀和&#xff0c;可以得到原来的数组 ai ​a1​∑j1i−1​dj​ 1.2.2将差分数组的某一项加i,那么其后面的所有项都会相对于原数组加i 让2~4项加3 这个第三…...

    大数据技术之SPARK

    Spark Core 什么是 RDD 代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合 弹性 存储的弹性&#xff1a;内存与磁盘的自动切换&#xff1b; 容错的弹性&#xff1a;数据丢失可以自动恢复&#xff1b; 计算的弹性&#xff1a;…...

    S32K144的m_data_2地址不够存,重新在LD文件中配置地址区域

    在开发平台软件的时候代码中超出了64K的内存&#xff0c;单纯在ld文件中&#xff0c;增加m_data_2的存储长度&#xff0c;原先是0x00007000,我将长度修改为0x00008000,起始地址还是0x20000000,软件编译没有报错堆栈超出&#xff0c;但是软件下载到单片机中之后&#xff0c;144不…...

    Spyder、PyCharm、VS Code 和 Jupyter Notebook 对比分析

    在进行 Python 编程时&#xff0c;Spyder、PyCharm、VS Code 和 Jupyter Notebook 是最常用的几款开发工具&#xff08;IDE/编辑器&#xff09;。以下是它们在不同维度下的对比分析 &#x1f527; 一、基础介绍 软件类型主要特点Spyder科学计算IDE类似 MATLAB&#xff0c;集成…...

    vue3腾讯云直播 前端拉流(前端页面展示直播)

    1、引入文件&#xff0c;在index.html <link href"https://tcsdk.com/player/tcplayer/release/v5.3.2/tcplayer.min.css" rel"stylesheet" /><!--播放器脚本文件--><script src"https://tcsdk.com/player/tcplayer/release/v5.3.2/t…...

    应急物资仓库管理系统|基于GAV仓库管理的应用

    基于AGV应用的应急物资管理系统(智物资DW-S300)建设的目标是实现应急物资管理的信息化、智能化、规范化,保证应急物资的安全性和使用时的高效性&#xff0c;做到应急物资可追踪、可溯源。 构建一个应急物资仓储管理系统实现包括系统基本信息管理、入库管理、出库管理、筹措管理…...

    ArkTS语言入门之接口、泛型、空安全、特殊运算符等

    前言 臭宝们&#xff0c;今天我们来学习ArkTS中最后的一些内容。 实现接口 包含implements子句的类必须实现列出的接口中定义的所有方法&#xff0c;但使用默认实现定义的方法除外。 interface DateInterface {now(): string; } class MyDate implements DateInterface {no…...

    蓝桥杯c++每日刷题(洛谷)

    目录 P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷 (luogu.com.cn) P8706 [蓝桥杯 2020 省 AB1] 解码 - 洛谷 (luogu.com.cn) P8711 [蓝桥杯 2020 省 B1] 整除序列 - 洛谷 (luogu.com.cn) P8722 [蓝桥杯 2020 省 AB3] 日期识别 - 洛谷 (luogu.com.cn) P10385 [蓝桥杯 2024…...

    Python+Requests 企业级接口测试入门(1~3天)

    PythonRequests 企业级接口测试入门 1、GET接口简单案例 我的答案&#xff1a; import time import requestsdef get_all_users():try:response requests.get(urlhttps://reqres.in/api/users, #接口地址timeout10 #超时时间)respons…...

    【android bluetooth 框架分析 01】【关键线程 3】【bt_jni_thread 线程介绍】

    1. bt_jni_thread 职责介绍 bt_jni_thread 这个线程的作用是专门负责处理蓝牙 JNI 层的消息循环&#xff0c;也可以说是 C 层和 Java 层交互的桥梁线程。 1.1 什么是 JNI 层&#xff1f;为什么需要这个线程&#xff1f; JNI&#xff08;Java Native Interface&#xff09;是 …...

    CCF - GESP Python三级考试题目示例

    CCF - GESP Python三级考试题目示例&#xff0c;你可以根据实际需求进行调整。 一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 以下关于Python中函数的说法&#xff0c;错误的是&#xff08; &#xff09; A. 函数定义使用def关键字 B. 函数必须有返回值 C.…...

    Windows10系统更改盘符

    Windows10系统更改盘符 导航 文章目录 Windows10系统更改盘符导航更改盘符 更改盘符 按下wini,再按k进入磁盘管理器 右击你想更改的磁盘&#xff0c;选择“更改驱动器号”和路径&#xff0c;选择好驱动器号后确定即可...

    软件功能性测试有多重要?功能性测试工具有哪些?

    软件功能性测试是指对软件应用程序进行的测试&#xff0c;旨在验证软件的每一个功能是否按预定要求正常运作。功能性测试通常基于软件的需求文档&#xff0c;从用户的角度出发&#xff0c;确保所有功能都能够满足用户的需求。 软件功能性测试在软件开发生命周期中扮演着至关重…...

    未来生态映像:杭州的科技自然协奏曲

    故事背景 故事发生在2050年的中国杭州&#xff0c;这座千年古城已蜕变为科技与自然完美交融的未来生态之城。从晨曦微露的西湖到暮色中的良渚文化村&#xff0c;每个角落都上演着人类智慧与自然韵律的动人对话。 故事摘要 当第一缕阳光亲吻西湖的生态浮岛&#xff0c;无人机携带…...

    电商核心指标解析与行业趋势:数据驱动的增长策略【大模型总结】

    电商核心指标解析与行业趋势&#xff1a;数据驱动的增长策略 在电商领域&#xff0c;数据是决策的核心。从流量监测到用户行为分析&#xff0c;从价格策略到技术赋能&#xff0c;每一个环节的优化都离不开对核心指标的深度理解。本文结合行业最新趋势与头部平台实践&#xff0…...

    ubuntu自动更新--unattended-upgrades

    ubuntu自动更新--unattended-upgrades 1 介绍2 发展历程3 配置与使用4 disable Auto update服务命令 参考 1 介绍 Unattended-Upgrades 是一个用于自动更新 Debian 及其衍生系统&#xff08;如 Ubuntu&#xff09;的工具。它的主要功能是自动检查、下载并安装系统更新&#xf…...

    在Ubuntu 22.04上配置【C/C++编译环境】

    在Ubuntu 22.04上配置C/C编译环境 如果你想在Ubuntu 22.04上编译和运行C或C程序&#xff0c;首先需要安装一个合适的编译器和相关工具。本文将为你提供详细的安装建议和操作步骤&#xff0c;帮助你快速搭建开发环境。 准备工作 在开始之前&#xff0c;确保你的系统可以通过终…...

    费马小定理

    快速幂 理论 a n a a ⋯ a a^n a a \cdots a anaa⋯a&#xff0c;暴力的计算需要 O(n) 的时间。 快速幂使用二进制拆分和倍增思想&#xff0c;仅需要 O(logn) 的时间。 对 n 做二进制拆分&#xff0c;例如&#xff0c; 3 13 3 ( 1101 ) 2 3 8 ⋅ 3 4 ⋅ 3 1 3^{13}…...