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

【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(四)

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨
✨ 个人主页:余辉zmh–CSDN博客
✨ 文章所属专栏:贪心算法篇–CSDN博客

在这里插入图片描述

文章目录

  • 前言
  • 例题
    • 1.合并区间
    • 2.无重叠的区间
    • 3.用最少数量的箭引爆气球
    • 4.可被3整除的最大和
    • 5.距离相等的条形码
    • 6.重构字符串

前言

本篇文章是对贪心算法练习题的讲解,有关贪心算法的讲解可以看本系列的第一篇文章,这里就不再讲解,继续讲解相关练习题。

例题

1.合并区间

题目

在这里插入图片描述

算法原理

本道题以及下面的两道题都是属于区间问题,对于区间问题,首先就是先排序,排序时可以按照左端点或者右端点排序,因为库函数中的sort函数默认是左端点排序,所以这里题解就是用的是左端点排序,如果是右端点排序,需要自己写排序规则;在排完序后,根据排序结果找到规律进而解决找到解决问题的策略。

本道题要求将重叠区间合并,在经过左端点排序后,能合并的区间都是相邻的,假设现在有两个区间,x和y,以下面的这张图为例:

在这里插入图片描述

和区间x合并时,区间y有上面8中情况,其中,前六种情况都是,区间y的左端点a<小于区间x的右端点,说明存在重叠部分,可以进行合并,合并区间的左端点依然是区间x的左端点left,而右端点则是区间x的右端点right和区间y的右端点b取最大的那一个。而在本题中第7中情况,区间y的左端点a=区间x的右端点right,同样也可以作为重叠部分进行合并,但不是说每道题中相等的情况都算作重叠,需要根据题意来决定。因此前7中的处理方式相同,合并区间然后和下一个区间比较。

如果是第8中情况,区间y的左端点a大于区间x的右端点right,说明没有重叠部分,则将当前区间x存放到结果数组中,区间y和下一个区间比较。

注意本道题有一个细节点,如果区间x访问下一个区间时越界结束,会导致最后的区间没有存放到结果数组中,因此在遍历完所有区间后,要将最后一个区间存放到结果数组中。

代码实现

vector<vector<int>> merge(vector<vector<int>>& intervals){//先将所有区间按照左端点排序sort(intervals.begin(), intervals.end());int left = intervals[0][0], right = intervals[0][1];vector<vector<int>> ret;for (int i = 1; i < intervals.size(); i++){int a = intervals[i][0], b = intervals[i][1];//如果下一个区间的左端点小于上一个区间的右端点,左端点不变,右端点取最大的if(a<=right){right = max(b, right);}//如果下一个区间的左端点大于上一个区间的右端点,说明没有交集else{ret.push_back({left, right});//更新做右端点left = a, right = b;}ret.push_back({left, right});}return ret;
}

2.无重叠的区间

题目

在这里插入图片描述

算法原理

本道题也属于区间问题,因此同样也需要先将所有区间排序,这里也是左端点排序,排序后,互相重叠的区间是连续的。题意要求移除最少的区间使区间不存在重叠的部分,根据正难则反思想,移除最少也就是最后保留的区间最多。

假设当前有两个区间x和y进行比较,如果区间x越大,和区间y的重叠率就会越高,如果出现重叠,就要移除一个区间,想要不存在重叠部分,那区间x就是越小越好,越小,重叠率就会越低,移除的次数就会变少,保留的区间就会越多,因此两个区间比较时,要取两个区间中较小的,也就是可以理解位取两个区间的交集。

在这里插入图片描述

和上一题不同的是,本道题因为要取交集,所以如果区间y是前6种情况右端点要取两个区间中最小的右端点,并且第7种情况不再算作重叠情况,而是和第8种情况归为不存在重叠的情况。如果区间y是后2种情况,更新当前区间位区间y,然后和下一个区间比较。

本道题的细节点,两个区间取交集时其实就相当于移除其中一个区间,因此在统计结果时应该在取交集时统计。

代码实现

int eraseOverlapIntervals(vector<vector<int>>& intervals){//删除最少的区间,相当于保留最多的区间//先将所有区间按照左端点排序sort(intervals.begin(), intervals.end());int n = intervals.size();//左指针表示上一个区间的左端点,右指针表示上一个区间的右端点int left = intervals[0][0], right = intervals[0][1];int ret = 0;for (int i = 1; i < n; i++){int a = intervals[i][0], b = intervals[i][2];//如果当前区间的左端点的值小于上一个区间的右端点的值,更新右指针为两个区间右端点最小的//贪心策略,上一个区间越小,和当前区间的重叠率就越小if(a<right){right = min(right, b);ret++;}//如果大于等于,直接更新左右指针else{left = a, right = b;}}return ret;
}

3.用最少数量的箭引爆气球

题目

在这里插入图片描述

在这里插入图片描述

算法原理

本道题也属于区间问题,根据题意要求,使用最少的箭,因此每次射出的一支箭都要尽可能多的射中更多的气球(贪心策略),所以要找区间的交集。

本道题和第二题的交集分类情况有些不同,本题中第7中情况,区间y的左端点等于区间x的右端点时,可以认为是重叠部分,所以前7种是一类,存在重叠部分的情况;最后一种为一类,不存在重叠的情况。处理方式还是相同的。

还有一个细节点就是,最后的结果统计时间也不同,因为要找多个区间的共同交集,所以当出现不存在重叠部分时,才统计一次结果,相当于找到了n个区间有交集,但是第n+1个区间和前面的没有交集,所以射出一支箭引爆n个气球。

在这里插入图片描述

代码实现

int findMinArrowShots(vector<vector<int>>& points){//区间问题,找到公共区间合并//先将所有区间按照左端点排序,重叠的区间是连续的(相当于交集)sort(points.begin(), points.end());int n = points.size();int ret = 0;//左右指针表示上个区间的左右端点int left = points[0][0], right = points[0][1];for (int i = 1; i < n; i++){int a = points[i][0], b = points[i][1];//如果当前区间的左端点小于等于上个区间的右端点,取公共区间,右端点取两个中最小的//这里等于也算是重叠if(a<=right){left = a;right = min(right, b);}//如果大于,说明没有公共区间,个数加1,更新左右指针else{ret++;left = a, right = b;}}return ret + 1;
}

4.可被3整除的最大和

题目

在这里插入图片描述

算法原理

本道题的思路:正难则反思想+贪心+分类讨论。

根据题意要求,找到可被3整除的最大和,如果遍历数组一个一个加再判断效率就会太慢,因此可以反着来,先将所有数字加在一起,求出整个数组和sum,然后再分情况讨论。

一个数模上3只有三种情况,对应数组和sum有三种情况:第一种情况模上3等于0,那当前数组和就是满足要求最大和,直接返回当前和即可;第二种情况模上3等于1;第三种情况模上3等于2,后两种情况还要继续分情况讨论。

先假设x1,x2表示模上3等于1的数,x1<x2;y1,y2表示模上3等于2的数,y1<y2。

如果sum模上3等于1说明至少存在一个1个数x1模上3等于1,该数一定是数组中最小的模上3等于1的数(贪心策略,这样才能保证和最大);或者至少存在两个数,y1,y2模上3等于2,这两个数也一定是数组中最小的和次小的模上3等于2的数(贪心策略),然后判断两种情况那种可以使和最大,然后返回。

如果模上3等于2说明至少存在两个数x1,x2模上3等于1,这两个数也一定是数组中最小的和次小的模上3等于1的数(贪心策略);或者至少存在一个数y1模上3等于2,该数也一定是数组中模上3等于2最小的数(贪心策略),然后判断两种情况那种可以使和最大,然后返回。

如何找到x1,x2和y1,y2:可以直接先将数组按升序排序,这样遍历过程中就是从小到大,第一次遇到的模上3等于1的数一定是x1,第二遇到的就是x2;同理,第一次遇到的模上3等于2的数一定是y1,第二次遇到的就是y2;但是使用排序的话时间复杂度是n乘以log n级别的;这里我是用分类讨论的思想直接在原来基础上遍历一遍找到对应四个数,因为x1<x2;y1<y2;如果当前数num模上3等于1并且小于等于x1,那就更新x2为x1,x1为当前数num;如果当前数num大于等于x1,但是小于等于x2,那就只更新x2为当前数num;同理,y1,y2也是这样判断。这样就能在排序的情况下,遍历一遍找到对应的四个数。

代码实现

int maxSumDivThree(vector<int>& nums){//正难则反思想//求出所有和int sum=0;//可以直接sort排序后查找,但是时间复杂度为n方//这里用分类讨论直接遍历一遍,时间复杂度为n//x1,x2表示模上3等于1,y1,y2表示模上3等于2int x1, x2, y1, y2;x1 = x2 = y1 = y2 = INT_MAX;for(auto num : nums){sum += num;if (num % 3 == 1&&num<=x1){x2=x1;x1 = num;}else if(num%3==1&&x1<=num&&num<=x2){x2 = num;}if (num % 3 == 2 && num <= y1){y2=y1;y1 = num;}else if (num % 3 == 2 && y1 <= num && num <= y2){y2 = num;}}//如果数组和模上3等于1,找到其中最小的x1,最小的y1和次小的y2if(sum%3==1){if(y1!=INT_MAX&&y2!=INT_MAX){return (sum - x1) > (sum - y1 - y2) ? sum - x1 : sum - y1 - y2;}else{return sum - x1;}}//如果数组和模上3等于2,找到其中最小的x1和次小的x2,最小的y1else if(sum%3==2){if(x1!=INT_MAX&&x2!=INT_MAX){return (sum - x1 - x2) > (sum - y1) ? sum - x1 - x2 : sum - y1;}else{return sum - y1;}}//如果模上3等于0,直接返回return sum;
}

5.距离相等的条形码

题目

在这里插入图片描述

算法原理

本道题思路:贪心+模拟+鸽巢原理。

既然题意要求,重新排列两两不能相同,其实就是类似于小学时候的在路边种树问题,间隔一个种一棵树,本道题也是同理,可以间隔一个放一个,并且是放完一种再放下一种树,比如有三个1,两个2,要先放完所有的1再放2,因为我们知道数组中下标是从0开始,因此可以先放偶数位,偶数位放完后再放奇数位。先统计所有数字的个数,找到其中个数最多的那个数,这里用到的就是贪心策略和鸽巢原理,先存放个数最多的那个数。

假设当前共有n个数,这里先设n=9,假设个数最多的是1,1的个数一定不会超过(n+1)/2,就是5个,这里用到的就是鸽巢原理,如果有n个巢穴,有n+1个鸽子,如果先一个巢穴放一只,那么最后一定会有一个巢穴存在两只鸽子;这里也是同理,因为是间隔存放,相当于两个位置看作一个巢穴,最多就是(n+1)/2个巢穴,一旦最多的那个数的个数大于(n+1)/2,那么就会出现两个1在一个巢穴,也就是相邻位置的情况:111_1_1_1,就是这种情况,所以最多只能有(n+1)/2个,1_1_1_1_1,如果超过那就是无解,不能排列成两两不相同。

至于为什么先排列最多的那个数,以上面的这种情况为例,1_1_1_1_1,5个1将两两位置间隔开,剩余的数随便排列也不会出现两两相同的情况;如果是这种情况,没有排满1_1_1_ _ _ _,假设下一个要排的是2,绝对不会出现1212122_2,2将剩余的偶数位排满然后排奇数位,循环一圈后奇数位的2和偶数位的2相同,如果是这种情况,2的个数一定会比1多,但是我们要求的是先排最多的数,所以,2的个数一定不会比1多,也就是不可能出现两两相同的情况。这就是本题的贪心策略。

代码实现

vector<int> rearrangeBarcodes(vector<int>& barcodes){int n = barcodes.size();//创建一个哈希表用来统计数字的个数unordered_map<int, int> hash;//一个用来标记个数最多的数字,一个用来记录最多数字的个数int maxval = 0, maxcount = 0;for(auto x : barcodes){if(++hash[x]>maxcount){maxcount=hash[x];maxval = x;}}//间隔排列,先排列偶数位并且是最多的那个数字vector<int> ret(n);int index = 0;while(maxcount--){ret[index] = maxval;index += 2;}//从哈希表中删除最多的那个数hash.erase(maxval);//将剩下的数依次填充剩余位,偶数位没有填完,优先偶数位,然后奇数位for(auto& [num,count] : hash){while(count--){if(index>=n){index = 1;}ret[index]=num;index += 2;}}return ret;
}

6.重构字符串

题目

在这里插入图片描述

算法原理

本道题和上面那道题原理相同,只不过上一个题是将数字排列,本道题是将字符排列。

代码实现

string reorganizeString(string s){//和上一道题思路一样unordered_map<char,int> hash;char maxval = 'a';int maxcount = 0;for(auto ch : s){if(++hash[ch]>maxcount){maxcount=hash[ch];maxval = ch;}}int n=s.size();//如果最多的个数超过一半,直接结束,鸽巢原理if(maxcount>(n+1)/2){return "";}string ret;ret.resize(n);int index=0;while(maxcount--){ret[index] = maxval;index += 2;}hash.erase(maxval);for(auto& [ch,count] : hash){while(count--){if(index>=n){index = 1;}ret[index] = ch;index += 2;}}return ret;
}

以上就是关于贪心算法练习题四的讲解,如果哪里有错的话,可以在评论区指正,也欢迎大家一起讨论学习,如果对你的学习有帮助的话,点点赞关注支持一下吧!!!
在这里插入图片描述

相关文章:

【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(四)

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;贪心算法篇–CSDN博客 文章目录 前言例题1.合并区间2.无重叠的区间3.用最少数量的箭引爆气球…...

Junit5使用教程(3)

第三部分&#xff1a;JUnit 5 进阶 3. 动态测试 一、动态测试是什么&#xff1f; 动态测试&#xff08;Dynamic Test&#xff09;允许在运行时生成测试用例&#xff0c;而不是在编译时通过 Test 静态定义。它通过 TestFactory 注解标记的方法动态生成一组测试用例&#xff0…...

WPS中解除工作表密码保护(忘记密码)

1.下载vba插件 项目首页 - WPS中如何启用宏附wps.vba.exe下载说明分享:WPS中如何启用宏&#xff1a;附wps.vba.exe下载说明本文将详细介绍如何在WPS中启用宏功能&#xff0c;并提供wps.vba.exe文件的下载说明 - GitCode 并按照步骤安装 2.wps中点击搜索&#xff0c;输入开发…...

通向AGI之路:人工通用智能的技术演进与人类未来

文章目录 引言:当机器开始思考一、AGI的本质定义与技术演进1.1 从专用到通用:智能形态的范式转移1.2 AGI发展路线图二、突破AGI的五大技术路径2.1 神经符号整合(Neuro-Symbolic AI)2.2 世界模型架构(World Models)2.3 具身认知理论(Embodied Cognition)三、AGI安全:价…...

kamailio-osp模块

该文档详细讲解了如何在Kamailio中配置和使用OSP模块&#xff08;Open Settlement Protocol Module&#xff09;&#xff0c;以实现基于ETSI标准的安全多边对等互联&#xff08;Secure Multi-Lateral Peering&#xff09;。以下是核心内容的总结&#xff1a; 1. 模块功能 OSP模…...

【Linux网络编程】:URL(encode),HTTP协议,telnet工具

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://mp.csdn…...

SpringMVC SpringMVC响应 一、数据处理及跳转

1. 结果跳转方式 ①.ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 <bean id"templateResolver" class"org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"><property name"p…...

C++SLT(三)——list

目录 一、list的介绍二、list的使用list的定义方式 三、list的插入和删除push_back和pop_backpush_front和pop_frontinserterase 四、list的迭代器使用五、list的元素获取六、list的大小控制七、list的操作函数sort和reversemergeremoveremove_ifuniqueassignswap 一、list的介…...

基于Coze平台实现抖音链接提取文案转小红书文案的智能体开发全流程解析

文章目录 引言:跨平台内容运营的AI解法实例最终效果1. 平台特性对比与转化需求分析1.1 用户画像与内容风格对比1.2 文案转化核心需求2. Coze平台技术架构解析2.1 Coze核心能力矩阵2.2 关键技术组件选型3. 智能体工作流设计3.1 完整处理流程3.2 关键节点说明4. 核心模块实现详解…...

32. 最长有效括号

动态规划 dp[i]表示以i下标为结尾的最长有效括号的长度&#xff0c;取dp[i]中的最大值即可。 i从1开始判断&#xff0c;只有s[i])才需要判断&#xff1a; 如果s[i-1](&#xff0c;那么dp[i]dp[i-2]2&#xff0c;注意判断i-2的范围否则&#xff0c;如果dp[i-1]>0&#xff0…...

Linux常见问题解决方法--2

如何反爬 后台对访问进行统计&#xff0c;如果单个 IP 访问超过阈值&#xff0c;予以封锁 后台对访问进行统计&#xff0c;如果单个 session 访问超过阈值&#xff0c;予以封锁 后台对访问进行统计&#xff0c;如果单个 userAgent 访问超过阈值&#xff0c;予以封锁 以上的组…...

STM32H7和F7 主要区别

STM32H7和F7系列是STMicroelectronics推出的高性能ARM Cortex-M微控制器系列&#xff0c;二者在性能、外设和用途上有显著区别。以下是它们的主要区别&#xff1a; 1. 内核与性能 STM32H7&#xff1a; 内核&#xff1a;Cortex-M7&#xff08;单核或双核&#xff0c;部分型号带…...

软件测试丨PyTorch 图像目标检测

随着人工智能和机器学习的飞速发展&#xff0c;图像目标检测技术在各个领域扮演着越来越重要的角色。无论是在安防监控、自动驾驶车辆&#xff0c;还是在医疗影像分析和智能家居中&#xff0c;图像目标检测都发挥着不可或缺的作用。今天&#xff0c;我们将深入探讨其中一种热门…...

利用TensorFlow.js实现浏览器端机器学习:一个全面指南

引言 随着深度学习技术的不断发展&#xff0c;机器学习已从传统的服务器端运算逐渐转向了前端技术。TensorFlow.js 是 Google 推出的一个用于在浏览器中进行机器学习的开源库&#xff0c;它允许开发者在浏览器中直接运行机器学习模型&#xff0c;而无需依赖后端服务器。Tensor…...

全流程安装DeepSeek开源模型

目录 安装Ollama选择大模型安装大模型对话备注 安装Ollama 安装DeepSeek首先需要安装一个Ollama&#xff0c;这个软件相当于运行DeepSeek模型的底层&#xff0c;没有这个底层就没办法跑DeepSeek AI模型。 下载地址&#xff1a; https://ollama.com/点击下载windows版本&…...

VulnHub | Prime - 1

https://vulnhub.com/entry/prime-1,358/https://vulnhub.com/entry/prime-1,358/ 0x01&#xff1a;靶场简介 Prime 1 是 VulHub 中的一台用于 OSCP 考试练习的靶机。通过本靶机&#xff0c;我们可以系统的了解的渗透测试的全流程。本靶机的通关目标如下&#xff1a; Get The…...

实验十 Servlet(一)

实验十 Servlet(一) 【实验目的】 1&#xff0e;了解Servlet运行原理 2&#xff0e;掌握Servlet实现方式 【实验内容】 1、参考课堂例子&#xff0c;客户端通过login.jsp发出登录请求&#xff0c;请求提交到loginServlet处理。如果用户名和密码相同则视为登录成功&#xff0c…...

寒假刷题Day22

一、2570. 合并两个二维数组 - 求和法 class Solution { public:vector<vector<int>> mergeArrays(vector<vector<int>>& nums1, vector<vector<int>>& nums2) {int i 0, j 0, n1 nums1.size(), n2 nums2.size();int tmp 0;…...

KES数据库实践指南:探索KES数据库的事务隔离级别

引言 前两篇文章我们详细讲解了如何安装KES金仓数据库&#xff0c;并提供了快速查询和搭建基于coze平台的智能体的解决方案。今天&#xff0c;我们的焦点将放在并发控制机制和事务隔离级别上。 本文将通过一系列实验操作&#xff0c;深入探讨KES数据库中的并发控制机制和事务…...

基于STM32的智能加湿器设计(新版本)

目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 &#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是加湿器。设备的详细功能见网盘中的文章《12、基于…...

Electricity Market Optimization 探索系列(三)

本文参考链接link 电网容量规划是一个寻求最优发电容量的过程&#xff0c;找到的最优发电容量能够可靠地满足未来电网的需求 发电机的容量和发电成本呈正相关关系&#xff0c;一台发电机的发电量不能超过其额定发电容量&#xff0c;结合我之前的博客所说的内容&#xff0c;可…...

JAVA进阶之线程

为神马有线程&#xff1f;这玩意儿在干嘛&#xff1f;&#xff1f;&#xff1f; 回答这个问题&#xff0c;就先要知道一点点计算机的工作方式。 总所周知&#xff0c;计算机有五部分&#xff1a;输入输出、计算器、存储器、控制器。而在计算机内&#xff0c;CPU、内存、I/O之…...

浙江安吉成新照明电器有限公司分布式光伏发电项目--安科瑞Acrel-1000DP分布式光伏监控系统

安科瑞 崔丽洁 项目背景 随着可再生能源的发展&#xff0c;分布式光伏发电成为重要的能源利用方式。浙江安吉成新照明电器有限公司 3234.465kWp 分布式光伏发电项目应运而生。该公司是螺旋节能灯毛管专业生产企业&#xff0c;于 2007 年 6 月成立&#xff0c;具备全自动生产线、…...

pytorch实现主成分分析 (PCA):用于数据降维和特征提取

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析&#xff08;PCA&#xff09;可以通过以下步骤进行&#xff1a; 标准化数据&#xff1a;首先&#xff0c;需要对数据进行标准化处理&#xff0c;确保每个特征的均值为 0&#xff0c;方差…...

2025_2_4 C语言中关于free函数及悬空指针,链表的一级指针和二级指指针

1.free函数 free函数所接受的参数只能是动态分配出来的内存&#xff0c;&#xff0c;否者free的行为是未定义的同一片内存空间不能被free两次 free过后的内存可能会引发悬空指针的问题 2.悬空指针 悬空指针的问题主要是free过后的内存空间&#xff0c;原先指向这片空间的指…...

pytorch逻辑回归实现垃圾邮件检测

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 完整代码&#xff1a; import torch import torch.nn as nn import torch.optim as optim from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split …...

一次线程数超限导致的hive写入hbase作业失败分析

1.集群配置 操作系统:SuSe操作系统 集群节点:100台相同配置的服务器 单台:核心112Core,内存396G 2.问题现象 现象1:跑单个入库任务报错,批量提交任务后出现OOM异常 执行12个hivesql,将数据写入hbase.hbase入库有近一半的任务报错。 每次报错的任务不是同一个,hivesql…...

JAVA安全—反射机制攻击链类对象成员变量方法构造方法

前言 还是JAVA安全&#xff0c;哎&#xff0c;真的讲不完&#xff0c;太多啦。 今天主要是讲一下JAVA中的反射机制&#xff0c;因为反序列化的利用基本都是要用到这个反射机制&#xff0c;还有一些攻击链条的构造&#xff0c;也会用到&#xff0c;所以就讲一下。 什么是反射…...

Java集合面试总结(题目来源JavaGuide)

问题1&#xff1a;说说 List,Set,Map 三者的区别&#xff1f; 在 Java 中&#xff0c;List、Set 和 Map 是最常用的集合框架&#xff08;Collection Framework&#xff09;接口&#xff0c;它们的主要区别如下&#xff1a; 1. List&#xff08;列表&#xff09; 特点&#xf…...

【区块链】深入理解椭圆曲线密码学(ECC)

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入理解椭圆曲线密码学(ECC)1. 概述2. 椭圆曲线的数学基础2.1 基本定义2.2 有限…...

接口游标分页

由于数据库本身的的限制(以MySQL为例),以 page_num,page_size 为代表的偏移分页方式不可避免的会遇到深分页问题。 不过用户若要找符合条件的少量数据,通过翻页则十分低效,且大多用户也不会往后翻很多页,故对于C端筛选数据场景,限制分页数量增加筛选条件才是标准解决方…...

大数据数仓实战项目(离线数仓+实时数仓)2

目录 1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast_shops 商…...

C++输入输出(上)

cin和cout cin是C中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用 cin来进行数据的提取,cin一般是和 >> (流提取运算符) 配合使用的。 cin的功能和scanf是类似的 cout是C中提供的标准输出流对象,一般针对的是控制台的窗口,也就是将数据以字符…...

SpringBoot 连接Elasticsearch带账号密码认证 ES连接 加密连接

依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>配置文件 es:ip: 172.23.4.130port: 9200user: elasticpassword: qwertyuiop读取配置文件…...

选择排序

选择排序的基本思想&#xff1a; 每⼀次从待排序的数据元素中选出最⼩&#xff08;或最⼤&#xff09;的⼀个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待 排序的数据元素排完。 直接选择排序 1. 在元素集合 array[i]--array[n-1] 中选择关键码最⼤(⼩)的数据…...

Linux——进程概念

目录 一、系统调用和库函数概念二、基本概念三、描述进程-PCB3.1 task_struct-PCB的一种3.2 task_ struct内容分类 四、组织进程五、查看进程六、通过系统调用获取进程标示符七、通过系统调用创建进程- fork初始7.1 fork函数创建子进程7.2 fork 之后通常要用 if 进行分流 八、进…...

强化学习笔记(5)——PPO

PPO视频课程来源 首先理解采样期望的转换 变量x在p(x)分布下&#xff0c;函数f(x)的期望 等于f(x)乘以对应出现概率p(x)的累加 经过转换后变成 x在q(x)分布下&#xff0c;f(x)*p(x)/q(x) 的期望。 起因是&#xff1a;求最大化回报的期望&#xff0c;所以对ceta求梯度 具体举例…...

Java设计模式:行为型模式→状态模式

Java 状态模式详解 1. 定义 状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在内部状态改变时改变其行为。状态模式通过将状态需要的行为封装在不同的状态类中&#xff0c;实现对象行为的动态改变。该模式的核心思想是分离不同状态…...

postgresql的用户、数据库和表

在 PostgreSQL 中&#xff0c;用户、数据库和表是关系型数据库系统的基本组成部分。理解这些概念对数据库管理和操作至关重要。下面是对这些概念的详细解释&#xff1a; 1. 用户&#xff08;User&#xff09; 在 PostgreSQL 中&#xff0c;用户&#xff08;也称为 角色&#…...

什么是Rust?它有什么特点?为什么要学习Rust?

什么是Rust&#xff1f;它有什么特点&#xff1f;为什么要学习Rust&#xff1f; 如果你是一名编程初学者&#xff0c;或者已经有一些编程经验但对Rust感兴趣&#xff0c;那么这篇文章就是为你准备的&#xff01;我们将用简单易懂的语言&#xff0c;带你了解Rust是什么、它有什…...

Maven(Ⅱ):依赖范围,依赖传递,依赖阻断,可选依赖

1. Maven 依赖范围 概念 依赖范围&#xff08;Dependency Scope&#xff09;用于控制依赖在不同构建阶段的可见性和可用性。Maven 定义了几种不同的依赖范围&#xff0c;每种范围都有其特定的使用场景。 常见依赖范围及用途 compile&#xff1a;默认的依赖范围&#xff0c;…...

个人c项目 java项目解释

1. 测试环境与方法 中文&#xff1a; 本地测试环境&#xff1a;可以在一台配置中等的电脑上构建一个测试环境&#xff0c;利用现成的大词库数据&#xff08;例如英文词典或自定义数据集&#xff09;来构建 Trie。使用 C 语言的编译器&#xff08;例如 gcc&#xff09;编译项目&…...

51单片机看门狗系统

在 STC89C52 单片机中&#xff0c;看门狗控制寄存器的固定地址为 0xE1。此地址由芯片厂商在硬件设计时确定&#xff0c;但是它在头文件中并未给出&#xff0c;因此在使用看门狗系统时需要声明下这个特殊功能寄存器 sfr WDT_CONTR 0xE1; 本案将用一个小灯的工作状况来展示看门…...

爬虫基础(五)爬虫基本原理

目录 一、爬虫是什么 二、爬虫过程 &#xff08;1&#xff09;获取网页 &#xff08;2&#xff09;提取信息 &#xff08;3&#xff09;保存数据 三、爬虫可爬的数据 四、爬虫问题 一、爬虫是什么 互联网&#xff0c;后面有个网字&#xff0c;我们可以把它看成一张蜘蛛网…...

Android 使用ExpandableListView时,需要注意哪些细节

1. 布局属性设置 尺寸属性 宽度和高度&#xff1a;要合理设置 android:layout_width 和 android:layout_height 属性。如果设置为 match_parent&#xff0c;它会填满父容器&#xff1b;设置为 wrap_content&#xff0c;则会根据内容自动调整大小。例如&#xff0c;若想让 Exp…...

人工智能赋能企业系统架构设计:以ERP与CRM系统为例

一、引言 1.1 研究背景与意义 在数字化时代&#xff0c;信息技术飞速发展&#xff0c;人工智能&#xff08;Artificial Intelligence, AI&#xff09;作为一项具有变革性的技术&#xff0c;正深刻地影响着各个领域。近年来&#xff0c;AI 在技术上取得了显著突破&#xff0c;…...

使用HttpClient和HttpRequest发送HTTP请求

项目中经常会用到向第三方系统发送请求来传递数据或者获得信息&#xff0c;一般用的比较多的为HttpClient 和 HttpRequest&#xff0c;这里简要总结一下 HttpClient 和 HttpRequest 的用法 一、HttpClient 1. 发送get请求 public static String get(String url, Map<Stri…...

深度解析:网站快速收录与服务器性能的关系

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/37.html 网站快速收录与服务器性能之间存在着密切的关系。服务器作为网站运行的基础设施&#xff0c;其性能直接影响到搜索引擎对网站的抓取效率和收录速度。以下是对这一关系的深度解析&am…...

Android记事本App设计开发项目实战教程2025最新版Android Studio

平时上课录了个视频&#xff0c;从新建工程到打包Apk&#xff0c;从头做到尾&#xff0c;没有遗漏任何实现细节&#xff0c;欢迎学过Android基础的同学参加&#xff0c;如果你做过其他终端软件开发&#xff0c;也可以学习&#xff0c;快速上手Android基础开发。 Android记事本课…...

DeepSeek-R1大模型学习笔记

DeepSeek-R1模型架构设计 DeepSeek-R1基于DeepSeek-V3 base模型&#xff0c;提出了一系列训练策略&#xff0c;包括基于纯强化学习的训练&#xff08;DeepSeek-R1-Zero&#xff09;、基于多阶段的训练和冷启动&#xff08;DeepSeek-R1&#xff09;、知识蒸馏等。下面的思维导图…...