教做家常菜的网站/网络推广专家
好久都没给大家带来算法专题啦,今天给大家带来滑动窗口专题的训练
题目一:长度最小的子数组
题目描述:
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3]
是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4] 输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0
题目解析:
我们要在给定的数组中找出最短的数的和大于等于target,我们通常可以怎么做呢:
1,暴力解法:
我们直接定义两个下标 left和right,让right向右遍历,遍历到最后3下标,记录大于等于target的最短长度,在让left++,从1下标开始让r从3下标一直走到头记录大于等于target的最短长度,这样的操作时间复杂度还是很大的为O(n方),我们要想一个全新的方法;
算法思路:
我们使用滑动窗口,还是定义两个指针left和right;
1,进窗口:让right的元素相加得到num;
2,判断条件;如果num的值>=target,更新结果,把当前的长度记录下来,此时right原地不动,出窗口:让左边的left下标的元素出去,直到num<=target;
滑动窗口这主要就是想,代码很固定的,进窗口,判断条件,(出窗口,更新结果,这俩的顺序因题而异);
代码实现:
class Solution {public int minSubArrayLen(int target, int[] nums) {int left = 0;int right = 0;int n = nums.length;int num = 0;int len = Integer.MAX_VALUE;for(;right<n;right++){num+=nums[right];while(num>=target){len = Math.min(len,right-left+1);num-=nums[left];left++;}}len = len==Integer.MAX_VALUE?0:len;return len;}
}
———————————————————————————————————————————
题目二:无重复字符的最长子串
题目描述:
给定一个字符串 s
,请你找出其中不含有重复字符的 最长连续子字符串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子字符串是 "abc",所以其
长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子字符串是 "b"
,所以其长度为 1。
示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
示例 4:
输入: s = "" 输出: 0
题目解析:
和刚才的题差不多,我们得到一个数组我们要统计连续不重复字符的最大长度,我们依旧是可以进行暴力解法,定义两个指针,一次一次遍历找到最长且满足条件的字符串,但是太慢了,我们还是要使用方法;
算法思路:
准备:定义一个数组模拟哈希,为啥不直接用HashMap或者HashSet呢,不断的调用这些方法也很慢,我们直接用数组的话会快很多很多,把字符串s转换成字符数组,个人习惯;
1,进窗口:Hash对应的字符下标+1;
2,更新结果:在判断条件之前就要更新结果,进窗口一次就记录一次结果;
3,判断条件:当进入的right的Hash大于1,就要一直出窗口,直到窗口中没有1重复元素了为止;
代码实现:
class Solution {public int lengthOfLongestSubstring(String s) {int[] hash1 = new int[10000];char[] arr = s.toCharArray();int left = 0;int right = 0;int len = 0;int n = arr.length;for(;right<n;right++){hash1[arr[right]]++;while(hash1[arr[right]]>1){hash1[arr[left]]--;left++;}len = Math.max(len,right-left+1);}return len;}
}
———————————————————————————————————————————
题目三:最大连续1的个数
题目描述:
给定一个二进制数组 nums
和一个整数 k
,假设最多可以翻转 k
个 0
,则返回执行操作后 数组中连续 1
的最大个数 。
示例 1:
输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2 输出:6 解释:[1,1,1,0,0,1,1,1,1,1,1] 粗体数字从 0 翻转到 1,最长的子数组长度为 6。
示例 2:
输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3 输出:10 解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1] 粗体数字从 0 翻转到 1,最长的子数组长度为 10。
题目解析:
还是一样给了一个数组,和一个整数k,我们要找到连续1最大的长度,并且0有k次机会可以翻转为1,我们就可以把k当做一个窗口,小于k进窗口,超过k出窗口;
算法思路:
1,定义count与k比较当作窗口
2,进窗口:如果nums[right]的值为0,count++,为1count不变,
3,判断条件:当count>k,开始循环出窗口直到count<=k,
4,更新结果:在判断条件外中更新结果;
代码实现:
class Solution {public int longestOnes(int[] nums, int k) {int left=0, right=0;int n = nums.length;int count = 0;int len = 0;for(;right<n;++right){if(nums[right]==0){++count;}while(count>k){if(nums[left]==0){--count;}++left;}len = Math.max(len,right-left+1);}return len;}
}
———————————————————————————————————————————
题目四:将x减到0的最小操作数
题目描述:
给你一个整数数组 nums
和一个整数 x
。每一次操作时,你应当移除数组 nums
最左边或最右边的元素,然后从 x
中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。
如果可以将 x
恰好 减到 0
,返回 最小操作数 ;否则,返回 -1
。
示例 1:
输入:nums = [1,1,4,2,3], x = 5 输出:2 解释:最佳解决方案是移除后两个元素,将 x 减到 0 。
示例 2:
输入:nums = [5,6,7,8,9], x = 4 输出:-1
示例 3:
输入:nums = [3,2,20,1,1,3], x = 10 输出:5 解释:最佳解决方案是移除后三个元素和前两个元素(总共 5 次操作),将 x 减到 0 。
题目解析:
这道题也是给我们了个数组和一个整数x,让我们从数组左边或者右边拿一个数来减去x直到让他为0,这题干做的话其实挺难的也不好去想,但是我做题一般看到最大连续,最小连续等等的字样,我就会想到滑动窗口,我们可以反过来想,它要减两边的数,那么我可以加中间的数,它要最小操作数,算中间就是加最大操作数,让x减到零就是把数组所有数加起来减x;
算法思路:
1,把数组所有元素相加减x,就是中间元素的target,
2,进窗口:nums[left]相加,
3,判断条件:当相加的结果大于我们的target就出窗口,减去nums[left]的值,
4,更新结果,当相加的值等于target更新长度
5,注意,left不能超过right;
代码实现:
class Solution {public int minOperations(int[] nums, int x) {int left=0, right=0, n=nums.length;int len=-1, num=0, num2=0;for(int i=0;i<n;i++){num2+=nums[i];}int targrt = num2-x; for(;right<n;++right){num+=nums[right];while(left<=right && num>targrt){num-=nums[left];left++;}if(num==targrt){len = Math.max(len,right-left+1);}}if(len==-1){return -1;}return n-len;}
}
———————————————————————————————————————————
题目五:水果成篮
题目描述:
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits
表示,其中 fruits[i]
是第 i
棵树上的水果 种类 。
你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:
- 你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
- 你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
- 一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。
给你一个整数数组 fruits
,返回你可以收集的水果的 最大 数目。
示例 1:
输入:fruits = [1,2,1] 输出:3 解释:可以采摘全部 3 棵树。
示例 2:
输入:fruits = [0,1,2,2] 输出:3 解释:可以采摘 [1,2,2] 这三棵树。 如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。
示例 3:
输入:fruits = [1,2,3,2,2] 输出:4 解释:可以采摘 [2,3,2,2] 这四棵树。 如果从第一棵树开始采摘,则只能采摘 [1,2] 这两棵树。
示例 4:
输入:fruits = [3,3,3,1,2,1,1,2,3,3,4] 输出:5 解释:可以采摘 [1,2,1,1,2] 这五棵树。
题目解析:
最讨厌阅读理解了,这到题简单来说,就是给我一个数组,完了你的容器中只允许有两种水果,水果的数量可以一直增加,但是水果的种类就能有两种,我们还是可以用暴力做法一个一个枚举,但是他说最大连续呀,它还有容器(窗口);
算法思路:
1,创建数组模拟哈希表,count为容量,本题为两个
2,进窗口:hash[fruits[right]]++,另外如果哈希数组为空count++,
3,更新结果:在判断之前就要更新结果;
4,判断条件:如果count>2那么就要出窗口:hash[fruits[left]]--;
代码实现:
class Solution {public int totalFruit(int[] fruits) {int right = 0, left = 0, n = fruits.length;int count = 0, len = 0;int[] hash = new int[100000];for(;right<n;right++){if(hash[fruits[right]]==0){count++;}hash[fruits[right]]++;while(count>2){hash[fruits[left]]--;if(hash[fruits[left]]==0){count--;}left++;}len = Math.max(len,right-left+1);}return len;}
}
———————————————————————————————————————————
题目六:找到字符串中所有字母的异位词
题目描述:
给定两个字符串 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" 的变位词。
题目解析:
我们先来了解下异位词,比如abc 那么异位词就是abc,acb,bac,bca,cab,cba,但是只能有该字符串有的元素和元素数量,这道题就是让我们在字符串中找到所给字符串的异位词,这道题挺麻烦的,可以用暴力枚举但是很显然这题的第二个字符串就是窗口,限制了长度也限制了类型那不就是个窗口嘛;
算法思路:
准备:把俩字符串转换为字符数组(习惯),我们定义两个哈希数组,把目标数组遍历,把所有元素放到哈希数组1中备用,开始遍历数组2,有效字母个数count;
1,进窗口:直接Hash[s[right]]++,这时候判断if( hash2[s[right]]<=hash1[s[right]] )时 ,count++,因为只有Hash2中的元素小于等于Hash1时进窗口才会有效,count才能加加,其他任何情况都不行;
2,判断条件:当现在判断的长度大于目标数组长度时,就是right-left+1>目标数组长度,
我们先判断如果出的元素是目标数组中的元素,我们就count--,就是hash2[s[left]]<=hash1[s[left]]的时候,之后让Hash[s[left]]--;left++;
3,更新结果:当有效字母count==目标数组长度时就能更新了
代码实现:
class Solution {public List<Integer> findAnagrams(String ss, String pp) {char[] s = ss.toCharArray();char[] p = pp.toCharArray();int right = 0, left = 0;int ns = s.length, np = p.length;List<Integer> list1 = new ArrayList<>();int[] hash1 = new int[256];int[] hash2 = new int[256];int count = 0;for(int i=0;i<np;i++){hash1[p[i]]++;}for(;right<ns;right++){hash2[s[right]]++;if(hash1[s[right]]>=1 && hash2[s[right]]<=hash1[s[right]]){count++;}if(right-left+1>np){if(hash1[s[left]]>=1 && hash2[s[left]]<=hash1[s[left]]){count--;}hash2[s[left]]--;left++;}if(count==np){list1.add(left);}}return list1;}
}
———————————————————————————————————————————
题目七:串联所有单词的子串
题目描述:
给定一个字符串 s
和一个字符串数组 words
。 words
中所有字符串 长度相同。
s
中的 串联子串 是指一个包含 words
中所有字符串以任意顺序排列连接起来的子串。
- 例如,如果
words = ["ab","cd","ef"]
, 那么"abcdef"
,"abefcd"
,"cdabef"
,"cdefab"
,"efabcd"
, 和"efcdab"
都是串联子串。"acdbef"
不是串联子串,因为他不是任何words
排列的连接。
返回所有串联子串在 s
中的开始索引。你可以以 任意顺序 返回答案。
示例 1:
输入:s = "barfoothefoobarman", words = ["foo","bar"]
输出:[0,9]
解释:因为 words.length == 2 同时 words[i].length == 3,连接的子字符串的长度必须为 6。
子串 "barfoo" 开始位置是 0。它是 words 中以 ["bar","foo"] 顺序排列的连接。
子串 "foobar" 开始位置是 9。它是 words 中以 ["foo","bar"] 顺序排列的连接。
输出顺序无关紧要。返回 [9,0] 也是可以的。
示例 2:
输入:s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"]
输出:[]
解释:因为 words.length == 4 并且 words[i].length == 4,所以串联子串的长度必须为 16。
s 中没有子串长度为 16 并且等于 words 的任何顺序排列的连接。
所以我们返回一个空数组。
示例 3:
输入:s = "barfoofoobarthefoobarman", words = ["bar","foo","the"] 输出:[6,9,12] 解释:因为 words.length == 3 并且 words[i].length == 3,所以串联子串的长度必须为 9。 子串 "foobarthe" 开始位置是 6。它是 words 中以 ["foo","bar","the"] 顺序排列的连接。 子串 "barthefoo" 开始位置是 9。它是 words 中以 ["bar","the","foo"] 顺序排列的连接。 子串 "thefoobar" 开始位置是 12。它是 words 中以 ["the","foo","bar"] 顺序排列的连接。
题目解析:
这题噶比恶心,不是思路难是细节太多太多了,这题跟6题基本上差不多,但是目标数组变成了字符串数组,我们不是一个一个字符判断了,而是两个两个或者三个三个或更多;
算法思路:
准备:计算出目标数组的数组长度nw,和每个单词的长度num,准备两个哈希表Hash1放目标数组,Hash2放遍历数组,有效字符串个数count,执行次数k,这个k是个什么玩意,我们不是要在一组字符串中找这个目标数组符合要求的字符串吗,我们要遍历的数组并不是字符串而是一个一个的字符,我们从第一个字符开始和从第二个字符开始遍历每次截取的结果是不一样的,我弄个图,这说的太绕了:
我们目标数组的长度为2,我们每次遍历都是两个两个的,比如从0下标开始:
我们就会这样遍历完数组最终找到2下标为题目要求的,那么从1下标呢:
又是一组新的遍历结果,再从2下标呢:
结果是和0下标重复的,甚至少了一个,所以我们要进行k(次数)<num(目标数组每个单词的长度)次,最后的准备,把目标元素全部放到Hash1中;
1,进窗口:(先进后判断)Hash2.put(...........)
if(hash2.getOrDefault(in,0)<=hash1.getOrDefault(in,0)){
count++;
}
这块就和上一题一样
2,判断条件:当right-left+1(当前遍历长度) > (目标数组个数*一个多长)nw*num时开始出窗口:先出窗口后判断
if(hash2.getOrDefault(out,0)<=hash1.getOrDefault(out,0)){
count--;
}
操作有效单词个数;
3,更新结果:当count==nw 把有序的left添加到链表中;
代码实现:
class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer> list1 = new ArrayList<>();int left = 0, right = 0;int ns = s.length(), nw = words.length;HashMap<String,Integer> hash1 = new HashMap<>();int count = 0;int num = words[0].length();int k = 0;for(int i=0;i<nw;i++){hash1.put(words[i],hash1.getOrDefault(words[i],0)+1);}while(k<num){right = k;left = k;count = 0;HashMap<String,Integer> hash2 = new HashMap<>();for(;right+num<=ns;right+=num){String in = s.substring(right,right+num);hash2.put(in,hash2.getOrDefault(in,0)+1);if(hash2.getOrDefault(in,0)<=hash1.getOrDefault(in,0)){count++;}if(right-left+1>nw*num){String out = s.substring(left,left+num);if(hash2.getOrDefault(out,0)<=hash1.getOrDefault(out,0)){count--;}hash2.put(out,hash2.getOrDefault(out,0)-1);left+=num;}if(count==nw){list1.add(left);}}k++;}return list1; }
}
———————————————————————————————————————————
题目八:最小覆盖子串
题目描述:
给你一个字符串 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 的子串中, 因此没有符合条件的子字符串,返回空字符串。
题目解析:
难度下来啦,这题让我们在一组字符中只要找到有一串字符包含目标数组中几个元素就行了,既然最小连续,那么必定滑动窗口;
算法思路:
准备:模拟两个哈希表使用哈希数组(注意是快),把目标数组中所有元素放到哈希数组1
1,进窗口:将要遍历数组的每个元素放到Hash2如果
if(hash2[s[right]]<=hash1[s[right]]){
count++;
}不解释了,好几遍了,
2,判断条件并更新结果:这里当count==目标数组长度就更新结果并出窗口:
if(hash2[s[left]]<=hash1[s[left]]){
count--;
}
有效字母判断别忘了;
代码实现:
class Solution {public String minWindow(String ss, String tt) {char[] s = ss.toCharArray();char[] t = tt.toCharArray();int left = 0, right = 0;int ns = s.length, nt = t.length;int len = Integer.MAX_VALUE;int count = 0;int[] hash1 = new int[256];int[] hash2 = new int[256];int a=0;int b=0;for(int i = 0;i<nt;i++){hash1[t[i]]++;}for(;right<ns;right++){hash2[s[right]]++;if(hash2[s[right]]<=hash1[s[right]]){count++;}while(count==nt){if(right-left+1<len){len = right-left+1;a = left;b = right;}if(hash2[s[left]]<=hash1[s[left]]){count--;}hash2[s[left]]--;left++;}} if(len==Integer.MAX_VALUE){return "";}return ss.substring(a,b+1);}
}
相关文章:

优选算法合集————双指针(专题二)
好久都没给大家带来算法专题啦,今天给大家带来滑动窗口专题的训练 题目一:长度最小的子数组 题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …...

Ubuntu下Tkinter绑定数字小键盘上的回车键(PySide6类似)
设计了一个tkinter程序,在Win下绑定回车键,直接绑定"<Return>"就可以使用主键盘和小键盘的回车键直接“提交”,到了ubuntu下就不行了。经过搜索,发现ubuntu下主键盘和数字小键盘的回车键,名称不一样。…...

使用arcpy列表函数
本节将以ListFeatureClasses()为例,学习如何使用arcpy中的列表函数. 操作方法: 1.打开IDLE,新建脚本窗口 2.导入arcpy模块 3.设置工作空间 arcpy.env.workspace "<>" 4.调用ListFeatureClasses()函数,并将返回的值赋值给fcList变量 fcList arcpy.ListFe…...

基于联合概率密度与深度优化的反潜航空深弹命中概率模型研究摘要
前言:项目题材来自数学建模2024年的D题,文章内容为笔者和队友原创,提供一个思路。 摘要 随着现代军事技术的发展,深水炸弹在特定场景下的反潜作战效能日益凸显,如何最大化的发挥深弹威力也成为重要研究课题。本文针对评估深弹投掷落点对命中潜艇概率的影响进行分析,综合利…...

【PyQt】pyqt小案例实现简易文本编辑器
pyqt小案例实现简易文本编辑器 分析 实现了一个简单的文本编辑器,使用PyQt5框架构建。以下是代码的主要功能和特点: 主窗口类 (MyWindow): 继承自 QWidget 类。使用 .ui 文件加载用户界面布局。设置窗口标题、状态栏消息等。创建菜单栏及其子菜单项&…...

二叉树03(数据结构初阶)
文章目录 一:实现链式结构二叉树1.1前中后序遍历1.1.1遍历规则1.1.2代码实现 1.2结点个数以及高度等1.2.1二叉树结点个数1.2.2二叉树叶子结点个数1.2.3二叉树第k层结点个数1.2.4二叉树的深度/高度1.2.5 二叉树查找值为x的结点1.2.6二叉树的销毁 1.3层序遍历1.4判断是…...

ComfyUI工作流 图像反推生成人像手办人像参考(SDXL版)
文章目录 图像反推生成人像手办人像参考SD模型Node节点工作流程效果展示开发与应用图像反推生成人像手办人像参考 本工作流旨在通过利用 Stable Diffusion XL(SDXL)模型和相关辅助节点,实现高效的人像参考生成和手办设计。用户可通过加载定制的模型、LORA 调整和控制节点对…...

【01】共识机制
BTF共识 拜占庭将军问题 拜占庭将军问题是一个共识问题 起源 Leslie Lamport在论文《The Byzantine Generals Problem》提出拜占庭将军问题。 核心描述 军中可能有叛徒,却要保证进攻一致,由此引申到计算领域,发展成了一种容错理论。随着…...

sentinel的限流原理
Sentinel 的限流原理基于 流量统计 和 流量控制策略,通过动态规则对系统资源进行保护。其核心设计包括以下几个关键点: 流量统计模型:滑动时间窗口 Sentinel 使用 滑动时间窗口算法 统计单位时间内的请求量,相比传统的固定时间窗…...

ZOJ 1007 Numerical Summation of a Series
原题目链接 生成该系列值的表格 对于x 的 2001 个值,x 0.000、0.001、0.002、…、2.000。表中的所有条目的绝对误差必须小于 0.5e-12(精度为 12 位)。此问题基于 Hamming (1962) 的一个问题,当时的大型机按今天的微型计算机标准来…...

『 C 』 `##` 在 C 语言宏定义中的作用解析
文章目录 ## 运算符的基本概念可变参数宏与 ## 的应用可变参数宏简介## 处理可变参数的两种情况可变参数列表为空可变参数列表不为空 示例代码验证 在 C 和 C 编程里,宏定义是个很有用的工具。今天咱们就来聊聊 ## 这个预处理器连接运算符在宏定义中的作用ÿ…...

独立成分分析 (ICA):用于信号分离或降维
人工智能例子汇总:AI常见的算法和例子-CSDN博客 独立成分分析 (Independent Component Analysis, ICA) 是一种用于信号分离和降维的统计方法,常用于盲源分离 (Blind Source Separation, BSS) 问题,例如音频信号分离或脑电信号 (EEG) 处理。…...

为什么会有函数调用参数带标签的写法?Swift函数调用的参数传递需要加前缀是否是冗余?函数调用?函数参数?
为什么会有函数调用参数带标签的写法? ObjC函数参数形式与众不同,实参前会加前缀,尤其参数很多的情况,可读性很强。例如: [person setAge: 29 setSex:1 setClass: 35]; 这种参数前面加前缀描述也被叫标签(Label). 注意࿰…...

实际操作 检测缺陷刀片
号he 找到目标图像的缺陷位置,首先思路为对图像进行预处理,灰度-二值化-针对图像进行轮廓分析 //定义结构元素 Mat se getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1)); morphologyEx(thre, tc, MORPH_OPEN, se, Point(-1, -1), 1); …...

使用Pygame制作“青蛙过河”游戏
本篇博客将演示如何使用 Python Pygame 从零开始编写一款 Frogger 风格的小游戏。Frogger 是一款早期街机经典,玩家需要帮助青蛙穿越车水马龙的马路到达对岸。本示例提供了一个精简原型,包含角色移动、汽车生成与移动、碰撞检测、胜利条件等关键点。希望…...

BUU17 [RoarCTF 2019]Easy Calc1
自用 源代码 $(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div class"alert alert-success"><strong>答案:&l…...

堆的实现——对的应用(堆排序)
文章目录 1.堆的实现2.堆的应用--堆排序 大家在学堆的时候,需要有二叉树的基础知识,大家可以看我的二叉树文章:二叉树 1.堆的实现 如果有⼀个关键码的集合 K {k0 , k1 , k2 , …,kn−1 } ,把它的所有元素按完全⼆叉树…...

新生讲课——图和并查集
1.图的存储 (1).邻接矩阵 邻接矩阵可以借助stl中的vector,我们通过开一个二维矩阵,g[u]中存储的是u可以到达的点,定义如下 const int N 2e5 10; vector<int> g[N] 若是遇到带权图则定义如下 const int N 2e5 10; vector <pair <int ,…...

基于深度学习的视觉检测小项目(十七) 用户管理后台的编程
完成了用户管理功能的阶段。下一阶段进入AI功能相关。所有的资源见文章链接。 补充完后台代码的用户管理界面代码: import sqlite3from PySide6.QtCore import Slot from PySide6.QtWidgets import QDialog, QMessageBoxfrom . import user_manage # 导入使用ui…...

实战:利用百度站长平台加速网站收录
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/33.html 利用百度站长平台加速网站收录是一个实战性很强的过程,以下是一些具体的步骤和策略: 一、了解百度站长平台 百度站长平台是百度为网站管理员提供的一系列工…...

web-XSS-CTFHub
前言 在众多的CTF平台当中,作者认为CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。 作者更新了CTFHub系列,希望小伙伴们多多支持…...

【C++】P1957 口算练习题
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式:输出格式: 💯我的做法代码实现: 💯老师的做法代码实现: 💯对比分析&am…...

第二十三章 MySQL锁之表锁
目录 一、概述 二、语法 三、特点 一、概述 表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。 对于表级锁,主要分为以下三类: 1. 表锁 2. 元数…...

linux 进程补充
环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪 里,但是照样可以链接成功&#…...

渗透测试之文件包含漏洞 超详细的文件包含漏洞文章
目录 说明 通常分为两种类型: 本地文件包含 典型的攻击方式1: 影响: 典型的攻击方式2: 包含路径解释: 日志包含漏洞: 操作原理 包含漏洞读取文件 文件包含漏洞远程代码执行漏洞: 远程文件包含…...

Java 大视界 -- Java 大数据在智能医疗影像诊断中的应用(72)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 一、…...

Web - CSS3浮动定位与背景样式
概述 这篇文章主要介绍了 CSS3 中的浮动定位、背景样式、变形效果等内容。包括 BFC 规范与创建方法、浮动的功能与使用要点、定位的多种方式及特点、边框与圆角的设置、背景的颜色、图片等属性、多种变形效果及 3D 旋转等,还提到了浏览器私有前缀。 BFC规范与浏览…...

ConcurrentHashMap线程安全:分段锁 到 synchronized + CAS
专栏系列文章地址:https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标: 理解ConcurrentHashMap为什么线程安全;ConcurrentHashMap的具体细节还需要进一步研究 目录 ConcurrentHashMap介绍JDK7的分段锁实现JDK8的synchr…...

系统学习算法:专题九 穷举vs暴搜vs深搜vs回溯vs剪枝
其中标题的深搜,回溯,剪枝我们之前专题都已经有过学习和了解,这里多了两个穷举和暴搜,其实意思都差不多,穷举就是穷尽力气将所有情况都列举出来,暴搜就是暴力地去一个一个情况搜索,所以就是全部…...

解决 Pandas DataFrame 索引错误:KeyError:0
在使用 Pandas 处理数据时,KeyError 是一个常见的问题,尤其是在尝试通过索引访问数据时。本文将通过一个实际案例(使用SKLearn中的MINIST数据集为例),详细分析 KeyError 的原因,并提供解决方法。 1 问题背…...