力扣hot100-->滑动窗口、贪心
你好呀,欢迎来到 Dong雨 的技术小栈 🌱
在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。
👉 我的小世界:Dong雨
📌 分享我的学习旅程
🛠️ 提供贴心的实用工具
💡 记录每一个灵感火花
🌟✨ Hello,探索技术的你,这里是本篇的地图指南! ✨🌟
目录
🌟✨ Hello,探索技术的你,这里是本篇的地图指南! ✨🌟
滑动窗口
1. 3. 无重复字符的最长子串
2. 76. 最小覆盖子串
3. 239. 滑动窗口最大值
4. 438. 找到字符串中所有字母异位词
贪心
1. 55. 跳跃游戏
数学
1. 48. 旋转图像
其他
1. 253. 会议室 II
2.621. 任务调度器
🎉🌈 陪伴至此,感谢有你 🌈🎉
滑动窗口
1. 3. 无重复字符的最长子串
算术评级: 5
提示
给定一个字符串 s
,请你找出其中不含有重复字符的 最长 子串 的长度。
示例 1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
// 双指针
class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_map<char, int> need; // 使用哈希表记录字符的出现次数int n = s.size(); // 获取字符串的长度if (0 == n) return 0; // 如果字符串为空,直接返回0int left{}, right{1}, result{1}; // 初始化左右指针和结果变量need[s[left]]++; // 将第一个字符加入哈希表,表示已经访问过// 遍历字符串,移动右指针for (; right < n; ++right) {if (need[s[right]] > 0) { // 如果当前字符已经出现过(即在哈希表中计数大于0)// 移动左指针,直到当前字符不再重复while (need[s[right]] > 0) {need[s[left++]]--; // 将左指针指向的字符从哈希表中移除}}need[s[right]]++; // 将当前字符加入哈希表result = max(result, right - left + 1); // 更新最长不重复子串的长度}return result; // 返回最终结果}
};
2. 76. 最小覆盖子串
算术评级: 6
提示
给你一个字符串 s
、一个字符串 t
。返回 s
中涵盖 t
所有字符的最小子串。如果 s
中不存在涵盖 t
所有字符的子串,则返回空字符串 ""
。
注意:
- 对于
t
中重复字符,我们寻找的子字符串中该字符数量必须不少于t
中该字符数量。 - 如果
s
中存在这样的子串,我们保证它是唯一的答案。
示例 1:
输入:s = "ADOBECODEBANC", t = "ABC" 输出:"BANC" 解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。
示例 2:
输入:s = "a", t = "a" 输出:"a" 解释:整个字符串 s 是最小覆盖子串。
示例 3:
输入: s = "a", t = "aa" 输出: "" 解释: t 中两个字符 'a' 均应包含在 s 的子串中, 因此没有符合条件的子字符串,返回空字符串。
提示:
m == s.length
n == t.length
1 <= m, n <= 105
s
和t
由英文字母组成
// 滑动窗口+哈希表
class Solution {
public:string minWindow(string s, string t) {vector<int> need(128); // 使用大小为128的数组作为哈希表,记录字符的需要量// 初始化need数组,记录字符串t中每个字符的出现次数for (char c : t) need[c]++;int left{}, right{}; // 初始化左右指针int start{}; // 用于记录最小子串的起始位置int count = t.size(); // 记录还需要匹配的字符数量int size = INT_MAX; // 用于记录最小子串的长度,初始值为最大整数// 开始滑动窗口过程for (; right < s.size(); ++right) {char c = s[right]; // 当前右指针指向的字符if (need[c] > 0) count--; // 如果当前字符是需要的字符,则count减1need[c]--; // 将当前字符加入窗口,更新需要量// 当所有字符都匹配成功后(count == 0),尝试缩小窗口if (count == 0) {// 缩小左边界,直到窗口中不再包含多余的字符while (left < right && need[s[left]] < 0) {need[s[left++]]++; // 将左边界字符移出窗口}// 更新最小子串的长度和起始位置if (right - left + 1 < size) {size = right - left + 1; // 更新最小子串长度start = left; // 更新最小子串的起始位置}// 左边界右移,准备寻找下一个可能的子串need[s[left++]]++; // 将左边界字符移出窗口count++; // 由于移出了一个字符,count加1}}// 如果size仍为初始值INT_MAX,说明没有找到符合条件的子串,返回空字符串// 否则返回最小子串return size == INT_MAX ? "" : s.substr(start, size);}
};
3. 239. 滑动窗口最大值
算术评级: 6
提示
给你一个整数数组 nums
,有一个大小为 k
的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k
个数字。滑动窗口每次只向右移动一位。
返回 滑动窗口中的最大值 。
示例 1:
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 --------------- ----- [1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5 3] 6 7 51 3 -1 -3 [5 3 6] 7 61 3 -1 -3 5 [3 6 7] 7
示例 2:
输入:nums = [1], k = 1 输出:[1]
// 滑动窗口
class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {int n = nums.size(); // 获取数组的长度priority_queue<pair<int, int>> pq; // 使用优先队列(最大堆)存储窗口中的元素及其索引// 初始化第一个窗口(前k个元素)for (int i = 0; i < k; ++i) {pq.push(pair(nums[i], i)); // 将元素及其索引加入优先队列}vector<int> result; // 用于存储每个窗口的最大值result.push_back(pq.top().first); // 第一个窗口的最大值// 遍历数组,从第k个元素开始,模拟滑动窗口for (int i = k; i < n; ++i) {pq.push(pair(nums[i], i)); // 将当前元素加入优先队列// 移除窗口外的元素while (pq.top().second <= i - k) {pq.pop(); // 如果堆顶元素的索引不在当前窗口范围内,则移除}result.push_back(pq.top().first); // 当前窗口的最大值}return result; // 返回结果}
};
4. 438. 找到字符串中所有字母异位词
算术评级: 4
给定两个字符串 s
和 p
,找到 s
中所有 p
的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
示例 1:
输入: s = "cbaebabacd", p = "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。 起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
示例 2:
输入: s = "abab", p = "ab" 输出: [0,1,2] 解释: 起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。 起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。 起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。
// 滑动窗口
class Solution {
public:vector<int> findAnagrams(string s, string p) {int slen = s.size(); // 获取字符串 s 的长度int plen = p.size(); // 获取字符串 p 的长度// 如果 s 的长度小于 p 的长度,直接返回空结果if (slen < plen) return {};vector<int> sArr(26, 0); // 用于记录窗口内字符的频率(s 的子串)vector<int> pArr(26, 0); // 用于记录字符串 p 中字符的频率vector<int> ans; // 用于存储结果(异位词的起始索引)// 初始化 pArr,记录字符串 p 中每个字符的频率for (char c : p) {pArr[c - 'a']++; // 将字符 c 转换为索引(0-25),并增加频率}// 初始化 sArr,记录 s 中前 plen 个字符的频率for (int i = 0; i < plen; ++i) {sArr[s[i] - 'a']++; // 将字符 s[i] 转换为索引,并增加频率}// 检查初始窗口是否与 pArr 相等if (sArr == pArr) ans.emplace_back(0); // 如果相等,记录起始索引 0// 滑动窗口,从第 plen 个字符开始,到 s 的末尾for (int i = 0; i < slen - plen; ++i) {// 更新窗口:// 移除窗口左侧的字符(s[i]),并减少其频率sArr[s[i] - 'a']--;// 添加窗口右侧的字符(s[i + plen]),并增加其频率sArr[s[i + plen] - 'a']++;// 检查当前窗口是否与 pArr 相等if (sArr == pArr) ans.emplace_back(i + 1); // 如果相等,记录当前窗口的起始索引}return ans; // 返回所有异位词的起始索引}
};
贪心
1. 55. 跳跃游戏
算术评级: 5
给你一个非负整数数组 nums
,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true
;否则,返回 false
。
示例 1:
输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
示例 2:
输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
// 贪心
class Solution {
public:bool canJump(vector<int>& nums) {int n = nums.size(); // 获取数组的长度int maxJump = 0; // 用于记录当前能到达的最远位置for (int i = 0; i < n; ++i) {maxJump = max(maxJump, i + nums[i]); // 更新最远能到达的位置// 如果最远位置已经能到达或超过数组末尾,直接返回 trueif (maxJump >= n - 1) return true;// 如果当前位置 i 无法到达下一个位置(即 maxJump < i + 1),返回 falseif (maxJump < i + 1) {return false;}}return true; // 如果循环正常结束,说明可以到达末尾}
};
数学
1. 48. 旋转图像
算术评级: 5
给定一个 n × n 的二维矩阵 matrix
表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]]
示例 2:
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] 输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
class Solution {
public: // 重点是找到规律:对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。// 即 matrix[r][c] 在旋转后,新的位置是 matrix[c][n-r-1]// 方法一:借助辅助数组// void rotate(vector<vector<int>>& matrix) {// auto mNew = matrix; // 创建一个辅助矩阵// int n = matrix.size();// for (int i = 0; i < n; ++i) {// for (int j = 0; j < n; ++j) {// mNew[j][n - i - 1] = matrix[i][j]; // 根据规律更新位置// }// }// matrix = mNew; // 将辅助矩阵赋值回原矩阵// }// 方法二:利用翻转代替旋转// 水平翻转:matrix[r][c] = matrix[n-row-1][c]// 主对角线翻转: matrix[r][c] = matrix[c][r]void rotate(vector<vector<int>>& matrix) {int n = matrix.size(); // 获取矩阵的大小// 第一步:水平翻转(上下翻转)for (int i = 0; i < n / 2; ++i) { // 只需翻转上半部分for (int j = 0; j < n; ++j) { // 遍历每一列swap(matrix[i][j], matrix[n - i - 1][j]); // 交换第 i 行和第 n-i-1 行的元素}}// 第二步:主对角线翻转(沿对角线翻转)for (int i = 0; i < n; ++i) { // 遍历每一行for (int j = 0; j < i; ++j) { // 只需翻转对角线左侧的元素swap(matrix[i][j], matrix[j][i]); // 交换 matrix[i][j] 和 matrix[j][i]}}}
};
其他
1. 253. 会议室 II
给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。
示例 1:
输入: [[0, 30],[5, 10],[15, 20]]
输出: 2
示例 2:
输入: [[7,10],[2,4]]
输出: 1
// 优先队列(最小堆)
class Solution {
public:int minMeetingRooms(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end()); // 按会议开始时间排序// 使用最小堆(优先队列)来跟踪会议室的结束时间priority_queue<int, vector<int>, greater<int>> pq;for (auto &meet : intervals) {// 如果堆不为空且堆顶的结束时间小于等于当前会议的开始时间if (!pq.empty() && pq.top() <= meet[0]) {pq.pop(); // 释放会议室}pq.push(meet[1]); // 分配会议室给当前会议}return pq.size(); // 堆的大小即为需要的会议室数量}
};
2.621. 任务调度器
算术评级: 6
给你一个用字符数组 tasks
表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间 n
。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成,但有一个限制:两个 相同种类 的任务之间必须有长度为 n
的冷却时间。
返回完成所有任务所需要的 最短时间间隔 。
示例 1:
输入:tasks = ["A","A","A","B","B","B"], n = 2
输出:8
解释:
在完成任务 A 之后,你必须等待两个间隔。对任务 B 来说也是一样。在第 3 个间隔,A 和 B 都不能完成,所以你需要待命。在第 4 个间隔,由于已经经过了 2 个间隔,你可以再次执行 A 任务。
示例 2:
输入:tasks = ["A","C","A","B","D","B"], n = 1
输出:6
解释:一种可能的序列是:A -> B -> C -> D -> A -> B。
由于冷却间隔为 1,你可以在完成另一个任务后重复执行这个任务。
示例 3:
输入:tasks = ["A","A","A","B","B","B"], n = 3
输出:10
解释:一种可能的序列为:A -> B -> idle -> idle -> A -> B -> idle -> idle -> A -> B。
只有两种任务类型,A 和 B,需要被 3 个间隔分割。这导致重复执行这些任务的间隔当中有两次待命状态。
class Solution {
public:// 总排队时间 = (桶个数 - 1) * (n + 1) + 最后一桶的任务数int leastInterval(vector<char>& tasks, int n) {// 总的任务数int len = tasks.size();vector<int> vec(26, 0); // 用于记录每个任务的出现次数(任务为大写字母,共26个)// 统计每个任务的出现次数for (char c : tasks) ++vec[c - 'A'];// 按出现次数降序排序sort(vec.rbegin(), vec.rend());// 计算最后一桶的任务数int cnt = 1; // 初始化为1,表示至少有一个任务(出现次数最多的任务)while (cnt < vec.size() && vec[cnt] == vec[0]) {cnt++; // 如果有多个任务的出现次数等于最大值,它们都会在最后一桶中}// 计算总时间// vec[0] - 1:桶的数量(出现次数最多的任务)// n + 1:每个桶的总时间(一个任务 + n个冷却时间)// cnt:最后一桶的任务数return max(len, cnt + (n + 1) * (vec[0] - 1));}
};
🎉🌈 陪伴至此,感谢有你 🌈🎉
感谢你能坚持看到这里!如果这篇文章对你有一点点帮助,希望能收获你的:
👍 一个赞,⭐ 一个收藏,💬 一条评论 或 🔗 一键分享!
你的支持是我持续输出的最大动力!✨有问题?有灵感?
别犹豫,直接留言和我交流~让我们一起成长、一起突破 💡。最后,祝你:
🍯 生活美满如蜜香
🌞 心情灿烂似朝阳
🌱 成长如树渐成章
🚀 未来闪耀梦飞翔!再次感谢你的阅读!🌟 下次再见~ 🎉
相关文章:

力扣hot100-->滑动窗口、贪心
你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…...

Linux 内核中的高效并发处理:深入理解 hlist_add_head_rcu 与 NAPI 接口
在 Linux 内核的开发中,高效处理并发任务和数据结构的管理是提升系统性能的关键。特别是在网络子系统中,处理大量数据包的任务对性能和并发性提出了极高的要求。本文将深入探讨 Linux 内核中的 hlist_add_head_rcu 函数及其在 NAPI(网络接收处理接口)中的应用,揭示这些机制…...

centos哪个版本建站好?centos最稳定好用的版本
在信息化飞速发展的今天,服务器操作系统作为构建网络架构的基石,其稳定性和易用性成为企业和个人用户关注的重点。CentOS作为一款广受欢迎的开源服务器操作系统,凭借其强大的性能、出色的稳定性和丰富的软件包资源,成为众多用户建…...

软件越跑越慢的原因分析
如果是qt软件,可以用Qt Creator Profiler 作性能监控如果是通过web请求,可以用JMeter监控。 软件运行过程中逐渐变慢的现象,通常是因为系统资源(如 CPU、内存、磁盘 I/O 等)逐渐被消耗或软件中存在性能瓶颈。这个问题…...

LeetCode 力扣热题100 二叉树的直径
class Solution { public:// 定义一个变量 maxd,用于存储当前二叉树的最大直径。int maxd 0; // 主函数,计算二叉树的直径。int diameterOfBinaryTree(TreeNode* root) {// 调用 maxDepth 函数进行递归计算,并更新 maxd。maxDepth(root);// …...

【图文详解】lnmp架构搭建Discuz论坛
安装部署LNMP 系统及软件版本信息 软件名称版本nginx1.24.0mysql5.7.41php5.6.27安装nginx 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 关闭防火墙 systemctl stop firewalld &&a…...

小哆啦解题记:整数转罗马数字
小哆啦解题记:整数转罗马数字 小哆啦开始力扣每日一题的第十四天 https://leetcode.cn/problems/integer-to-roman/submissions/595220508/ 第一章:神秘的任务 一天,哆啦A梦接到了一项任务——将一个整数转换为罗马数字。他心想:…...

【Java数据结构】排序
【Java数据结构】排序 一、排序1.1 排序的概念1.2 排序的稳定性1.3 内部排序和外部排序1.3.1 内部排序1.3.2 外部排序 二、插入排序2.1 直接插入排序2.2 希尔排序 三、选择排序3.1 选择排序3.2 堆排序 四、交换排序4.1 冒泡排序4.2 快速排序Hoare法:挖坑法ÿ…...

我的求职之路合集
我把我秋招和春招的一些笔面试经验在这里发一下,网友们也可以参考一下。 我的求职之路:(1)如何谈自己的缺点 我的求职之路:(2)找工作时看重的点 我的求职之路:(3&…...

数据结构(四) B树/跳表
目录 1. LRU 2. B树 3. 跳表 1. LRU: 1.1 概念: 最近最少使用算法, 就是cache缓存的算法. 因为cache(位于内存和cpu之间的存储设备)是一种容量有限的缓存, 有新的数据进入就需要将原本的数据进行排出. 1.2 LRU cache实现: #include <iostream> #include <list>…...

Arcgis国产化替代:Bigemap Pro正式发布
在数字化时代,数据如同新时代的石油,蕴含着巨大的价值。从商业决策到科研探索,从城市规划到环境监测,海量数据的高效处理、精准分析与直观可视化,已成为各行业突破发展瓶颈、实现转型升级的关键所在。历经十年精心打磨…...

LBS 开发微课堂|AI向导接口服务:重塑用户的出行体验
为了让广大开发者 更深入地了解 百度地图开放平台的 技术能力 轻松掌握满满的 技术干货 更加简单地接入 位置服务 我们特别推出了 “位置服务(LBS)开发微课堂” 系列技术案例 第六期的主题是 《AI向导接口服务的能力与接入方案》 随着地图应…...

AI导航工具我开源了利用node爬取了几百条数据
序言 别因今天的懒惰,让明天的您后悔。输出文章的本意并不是为了得到赞美,而是为了让自己能够学会总结思考;当然,如果有幸能够给到你一点点灵感或者思考,那么我这篇文章的意义将无限放大。 背景 随着AI的发展市面上…...

openstack单机安装
openstack单机安装 网卡配置安装依赖开启虚拟环境修改配置文件 部署openstack部署openstack客户端访问可视化界面Horizon补充 本篇主要讲述Ubuntu2204单机安装openstackstable/2024.2。其他版本的Linux系统或者openstack版本,请参考openstack官网。 网卡配置 需要配…...

Vue3实现小红书瀑布流布局任意组件动态更新页面方法实践
思路 1.首先定义一个瀑布流容器,它的高度暂定(后面会更新)。把需要布局的组件(这里叫做waterfall-item)放在瀑布流容器里面渲染出来。使用绝对定位(position: absolute),把它移到屏幕…...

深度学习项目--基于LSTM的糖尿病预测探究(pytorch实现)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 LSTM模型一直是一个很经典的模型,一般用于序列数据预测,这个可以很好的挖掘数据上下文信息,本文将使用LSTM进行糖尿病…...

Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
什么是中间件? 在 Next.js 中,中间件(Middleware)是一种用于处理每个传入请求的功能。它允许你在请求到达页面之前对其进行修改或响应。 通过中间件,你可以实现诸如日志记录、身份验证、重定向、CORS配置、压缩等任务…...

python+playwright自动化测试(四):元素操作(键盘鼠标事件)、文件上传
目录 鼠标事件 悬停 移动 按键 点击 滚轮操作 拖拽 键盘事件 输入文本内容 type输入内容 fill输入内容 按键操作press 文件上传 下拉选/单选框/复选框 滚动条操作 鼠标事件 悬停 page.get_by_text(设置,exactTrue).nth(1).hover() 移动 page.mouse.move(x33…...

【论文+源码】Diffusion-LM 改进了可控文本生成
这篇论文探讨了如何在不重新训练的情况下控制语言模型(LM)的行为,这是自然语言生成中的一个重大开放问题。尽管近期一些研究在控制简单句子属性(如情感)方面取得了成功,但在复杂的细粒度控制(如…...

双目立体校正和Q矩阵
立体校正 对两个摄像机的图像平面重投影,使二者位于同一平面,而且左右图像的行对准。 Bouguet 该算法需要用到双目标定后外参(R,T) 从上图中可以看出,该算法主要分为两步: 使成像平面共面 这个办法很直观ÿ…...

vscode 自用插件
vscode按住ctrl鼠标左键无法跟踪跳转方法名,装这些插件就可以 vscode-elm-jump:常规的代码跳转定义 Vue CSS Peek:跳转css定义 vue-helper:变量函数只跳转定义 Vetur 代码提示 Baidu Comate 自动帮你写console.log Turbo Console Log: ctrl alt l 选中变量之后&am…...

OpenCV:在图像中添加高斯噪声、胡椒噪声
目录 在图像中添加高斯噪声 高斯噪声的特性 添加高斯噪声的实现 给图像添加胡椒噪声 实现胡椒噪声的步骤 相关阅读 OpenCV:图像处理中的低通滤波-CSDN博客 OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯-CSDN博客 OpenCV:图像滤波、卷积与…...

DuckDB:Golang操作DuckDB实战案例
DuckDB是一个嵌入式SQL数据库引擎。它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的。DuckDB支持各种数据类型和SQL特性。凭借其在以内存为中心的环境中处理高速分析的能力,它迅速受到数据科学家和分析师的欢迎。在这篇博文中࿰…...

MySQL入门(数据库、数据表、数据、字段的操作以及查询相关sql语法)
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

kotlin的协程的基础概念
Kotlin的协程是一种用于简化异步编程的强大工具。 理解协程的基础概念可以帮助开发者有效地利用其能力。 以下是Kotlin协程的一些关键基础概念: 协程(Coroutines) : 协程是一种用于处理并发任务的编程模型,它可以在单…...

Spring--SpringMVC使用(接收和响应数据、RESTFul风格设计、其他扩展)
SpringMVC使用 二.SpringMVC接收数据2.1访问路径设置2.2接收参数1.param和json2.param接收数据3 路径 参数接收4.json参数接收 2.3接收cookie数据2.4接收请求头数据2.5原生api获取2.6共享域对象 三.SringMVC响应数据3.1返回json数据ResponseBodyRestController 3.2返回静态资源…...

隐藏php版本信息x-powered-by
在生产环境中,并不想让别人知道用的是什么版本的php,可以把x-powered-by隐藏掉 在nginx配置文件加上fastcgi_hide_header X-Powered-By; 如下图所示 配置修改后平滑重启nginx...

哈夫曼树(构建、编码、译码)(详细分析+C++代码实现)
D 哈夫曼树 题目要求 编写一个哈夫曼编码译码程序。针对一段文本,根据文本中字符出现频率构造哈夫曼树,给出每个字符的哈夫曼编码,并进行译码,计算编码前后文本大小。 为确保构建的哈夫曼树唯一,本题做如下限定&…...

C++ 二叉搜索树
目录 概念 性能分析 二叉搜索树的插入 二叉树的查找 二叉树的前序遍历 二叉搜索树的删除(重点) 完整代码 key与value的使用 概念 对于一个二叉搜索树 若它的左子树不为空,则左子树上所有的节点的值都小于等于根节点的值若它的右子树不为空…...

docker构建Java项目镜像常用的Java版本,国内私有仓库公网快速下载,解决从docker.io无法下载的问题
2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任ÿ…...