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

算法题总结(七)——哈希表

当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法

242、有效地字母异位词

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

数组也是哈希表,用数组来记录

class Solution {public boolean isAnagram(String s, String t) {//打表记录的方式int[] record = new int[26];for(int i=0;i<s.length();i++)  //统计各个字母出现的次数//注意数组是length属性,String是length()方法{record[s.charAt(i)-'a']++;}for(int i=0;i<t.length();i++)   {record[t.charAt(i)-'a']--;    //可以用两个表 也可以用一个表相减看是否为0}for(int i=0;i<record.length;i++)  //注意这里要变量所有字母{if(record[i]!=0) return false;}return true;}
}

383、赎金信

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

输入:ransomNote = "a", magazine = "b"
输出:false

示例 2:

输入:ransomNote = "aa", magazine = "ab"
输出:false

示例 3:

输入:ransomNote = "aa", magazine = "aab"
输出:true

即magazine里的每个字符的个数要大于等于ransomNote的每个字符的个数,因此相减后要小于等于0,也可以用两个数组

class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] record =new int [26];for(int i=0;i<ransomNote.length();i++){record[ransomNote.charAt(i)-'a']++;}for(int i=0;i<magazine.length();i++){record[magazine.charAt(i)-'a']--;}for(int i=0;i<record.length;i++){if(record[i]>0) return false;}return true;}
}

#49、字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

因为字符异位词,他们每个字母排序后都是相同的,因此可以把这个排序后的字符串当做键

根据字母异位词排序之后是是相等的,来使用map进行分组

class Solution {public List<List<String>> groupAnagrams(String[] strs) {//想到使用map来进行,每个排列有一个键,把相同的放到一个键值对当中//因为字符异位词,他们每个字母排序后都是相同的,因此可以把这个排序后//的字符串当做键Map<String,List<String>> map =new HashMap<String,List<String>>();for(String str:strs){char[] array=str.toCharArray();Arrays.sort(array);String key=new String(array);  //数组可以直接构造字符串List<String> list =map.getOrDefault(key,new ArrayList<String>());list.add(str);map.put(key,list);}return new ArrayList<List<String>>(map.values());}
}

438、 找到字符串中所有字母异位词

给定两个字符串 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" 的异位词。

封装一个判断字母异位词的方法,然后利用双指针,判断长度等于p的长度的子串与p是否是字母异位词

class Solution {public List<Integer> findAnagrams(String s, String p) {int lens=s.length();int lenp=p.length();List<Integer> ans =new ArrayList<>();for(int l=0,r=lenp;r<=lens;l++,r++){//注意这里的subString不包括rif(isAnagram(s.substring(l,r),p))ans.add(l);}return ans;}//判断是否为字母异位词public boolean isAnagram(String s, String t) {//打表记录的方式int[] record = new int[26];for(int i=0;i<s.length();i++)  //统计各个字母出现的次数//注意数组是length属性,String是length()方法{record[s.charAt(i)-'a']++;}for(int i=0;i<t.length();i++)   {record[t.charAt(i)-'a']--;    //可以用两个表 也可以用一个表相减看是否为0}for(int i=0;i<record.length;i++)  //注意这里要变量所有字母{if(record[i]!=0) return false;}return true;}
}

350、两个数组的交集二

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

用数组作为哈希表

class Solution {public int[] intersect(int[] nums1, int[] nums2) {int[] record1 =new int[1002];int[] record2 =new int[1002];List<Integer> result =new ArrayList<>();for(int i=0;i<nums1.length;i++){record1[nums1[i]]++;}for(int i=0;i<nums2.length;i++){record2[nums2[i]]++;}for(int i=0;i<record1.length;i++){if(record1[i]>0 && record2[i]>0){//只需要添加这一行,即添加次数最小的个数for(int j=0;j<(record1[i]<record2[i]?record1[i]:record2[i]);j++)result.add(i);}}int[] ans=new int[result.size()];for(int i=0;i<result.size();i++){ans[i]=result.get(i);  //get(i)是取第i个位置的元素}return ans;}
}

202、快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
1² + 9² = 82
8² + 2² = 68
6² + 8² = 100
1² + 0² + 0² = 1

因为可能会循环,所以应该用set记录出现过的sum,如果sum没有出现过,加入set中,如果出现过,说明循环,则结束循环。

class Solution {public boolean isHappy(int n) {Set<Integer> set=new HashSet<>();while(n!=1)        //一直while直到1为止{int sum=0;while(n>0){int t=n%10;sum+=t*t;n=n/10;}n=sum;if(!set.contains(sum)) set.add(sum);else return false;}return true;}
}

也可以用字符串的方式实现求平方和

class Solution {public boolean isHappy(int n) {Set<Integer> set =new HashSet<>();//用来记录sum出现的次数while(n!=1){int sum=0;String s=String.valueOf(n);for(int i=0;i<s.length();i++){char c=s.charAt(i);int t=c-'0';sum+=t*t;}n=sum;if(!set.contains(sum))  set.add(sum);else  return false;}return true;}
}

1、两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适

一个存,一个找。

如果是返回的是数值,不是下标,还可以使用双指针法。

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map =new HashMap<>();int[] result =new int[2];for(int i=0;i<nums.length;i++){map.put(nums[i],i);}for(int i=0;i<nums.length;i++){Integer value=map.get(target-nums[i]);if(value !=null && value!=i)  //注意这里要判空并且要不相等//这里要先判断是否为空,防止空指针{result[0]=i;result[1]=value;return result;}}return result;}
}

454、四数相加二

给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

  • 0 <= i, j, k, l < n
  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

示例 1:

输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
输出:2
解释:
两个元组如下:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0

示例 2:

输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]
输出:1

直接四重循环复杂度太高,可以考虑二重循环,用一个map把两数之和存储起来,key是两数之和,value是个数。

两数之和存,另外两数之和找。

class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {//直接暴力会四重循环会超时,所以使用map记录一下Map<Integer,Integer> map = new HashMap<>();int count=0;for(int i:nums1)   //使用增强for循环{for(int j:nums2){int value = map.getOrDefault(i+j,0);map.put(i+j,value+1);}}for(int i:nums3){for(int j:nums4){count+= map.getOrDefault(0-i-j,0);}}return count;}
}

#15、三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

哈希解法去重比较麻烦,容易超时,所以使用双指针的方法。

拿这个nums数组来举例,首先将数组排序,然后有一层for循环,i从下标0的地方开始,同时定一个下标left 定义在i+1的位置上,定义下标right 在数组结尾的位置上。

依然还是在数组中找到 abc 使得a + b +c =0,我们这里相当于 a = nums[i],b = nums[left],c = nums[right]。

接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。

如果 nums[i] + nums[left] + nums[right] < 0 说明 此时 三数之和小了,left 就向右移动,才能让三数之和大一些,直到left与right相遇为止。

时间复杂度:O(n^2)。

两数之和 就不能使用双指针法,因为两数之和要求返回的是索引下标, 而双指针法一定要排序,一旦排序之后原数组的索引就被改变了。

如果两数之和要求返回的是数值的话,就可以使用双指针法了。

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result =new ArrayList<List<Integer>>();Arrays.sort(nums);  //先排序//找出a + b + c = 0// a = nums[i], b = nums[left], c = nums[right]for(int i=0;i<nums.length;i++){//排序之后,第一个元素大于0,则和一定不会为0if(nums[i]>0)  //也相当于剪枝return result;//去重aif(i>0 && nums[i]==nums[i-1])continue;int sum=0;int left=i+1;int right=nums.length-1;while(right>left){sum=nums[i]+nums[left]+nums[right];if(sum>0)right--;else if(sum<0)left++;//相加为0else{  //等于0 的话,先去重,再减result.add(Arrays.asList(nums[i],nums[left],nums[right]));// 去重逻辑应该放在找到一个三元组之后,对b 和 c去重while(right>left && nums[right]==nums[right-1]) right--;while(right>left && nums[left]==nums[left+1]) left++;right--;left++;}}}return result;}
}

18、四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • a、b、c 和 d互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

提示:

  • 1 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

四数之和,和三数之和是一个思路,都是使用双指针法, 基本解法就是在三数之和的基础上再套一层for循环。

但是有一些细节需要注意,例如: 不要判断nums[k] > target 就返回了,三数之和 可以通过 nums[i] > 0 就返回了,因为 0 已经是确定的数了,四数之和这道题目 target是任意值。比如:数组是[-4, -3, -2, -1],target是-10,不能因为-4 > -10而跳过。但是我们依旧可以去做剪枝,逻辑变成

nums[i]>0 && nums[i]>target

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> result =new ArrayList<>();Arrays.sort(nums);for(int i=0;i<nums.length;i++){//剪枝if(nums[i]>0 && nums[i]>target)return result;//对nums[i]去重if(i>0 &&nums[i-1]==nums[i])continue;for(int j=i+1;j<nums.length;j++){//对nums[j]去重if(j>i+1 && nums[j-1]==nums[j])continue;int left=j+1;int right=nums.length-1;while(right>left){//nums的范围是int的范围,直接加会溢出long sum=(long) nums[i]+nums[j]+nums[left]+nums[right];if(sum>target)right--;else if(sum<target)left++;else{result.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));// 对nums[left]和nums[right]去重while(right>left && nums[right]==nums[right-1]) right--;while(right>left &&nums[left]==nums[left+1]) left++;left++;right--;}}}}return result;}
}

#128、最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

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

示例 1:

输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9
class Solution {public int longestConsecutive(int[] nums) {//使用哈希表,然后进行遍历,只有找到初始值的时候才会进入while开始计数//总的复杂度还是O(n)Set<Integer> set =new HashSet<>();for(int num:nums){set.add(num);}int result=0;  //存储最大的长度for(int num:set){if(set.contains(num-1)) //说明不是初始值continue;else{//说明前面没有元素int curNum=num;int ans=0; //存储每次的长度while(set.contains(curNum)){curNum++;ans++;}result=Math.max(result,ans);}}return result;}
}

560、和为 K 的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数

子数组是数组中元素的连续非空序列。

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2

使用前缀和+哈希表

两个位置对应的前缀和相减就是两个位置之间的和。

所以使用map保存着遍历的前缀和,然后判断sum-k对应的前缀和的个数。

class Solution {public int subarraySum(int[] nums, int k) {//前缀和+哈希表//存储前缀和以及对应的个数//为什么前缀和可以相等,因为数据有正有负Map<Integer,Integer> map =new HashMap<>();map.put(0,1);    //前缀和为0的个数只有一个int sum=0;   //计算前缀和int count=0;  //计算结果个数for(int num:nums){sum+=num;//先获得sum-k前缀和的个数,再把前缀和sum放入map中//因为当k=0时,先放入sum前缀和再获得个数,会多一个个数if(map.containsKey(sum-k))count+=map.get(sum-k);map.put(sum,map.getOrDefault(sum,0)+1);}return count;}
}

相关文章:

算法题总结(七)——哈希表

当我们遇到了要快速判断一个元素是否出现集合里的时候&#xff0c;就要考虑哈希法 242、有效地字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t…...

PS批量执行动作,ps批量修改图片大小,并修改文件的类型

PS批量执行动作&#xff0c;ps批量修改图片大小&#xff0c;并修改文件的类型 修改格式&#xff0c;文件类型为&#xff1a;jpg&#xff0c;psd&#xff0c;tiff&#xff0c;并修改大小 打开文件&#xff08;也可以不打开&#xff0c;&#xff09; 点击文件>脚本>文件…...

CentOS 替换 yum源 经验分享

视频教程在bilibili:CentOS 替换 yum源 经验分享_哔哩哔哩_bilibili问题原因 解决方法 1. 进入镜像目录 [rootlocalhost ~]# cd /etc/yum.repos.d/ 2.备份文件 [rootlocalhost yum.repos.d]# rename repo bak * 3.寻找阿里镜像源复制 https://developer.aliyun.com/mirror/ …...

Elasticsearch基础_2.数据类型

文章目录 一、基本的数据类型1.1、keyword1.2、text1.3、数值类型1.4、布尔类型1.5、时间类型 二、复杂的数据类型三、字段映射 一、基本的数据类型 1.1、keyword keyword类型是不进行切分的字符串类型。这里的“不进行切分”指的是&#xff1a;在索引时&#xff0c;对keyword…...

docker快速安装ELK

一、创建elk目录 创建/elk/elasticsearch/data/目录 mkdir -p /usr/local/share/elk/elasticsearch/data/ 创建/elk/logstash/pipeline/目录 mkdir -p /usr/local/share/elk/logstash/pipeline/ 创建/elk/kibana/conf/目录 mkdir -p /usr/local/share/elk/kibana/conf/ 二、创建…...

GS-SLAM论文阅读笔记-CaRtGS

前言 这篇文章看起来有点像Photo-slam的续作&#xff0c;行文格式和图片类型很接近&#xff0c;而且貌似是出自同一所学校的&#xff0c;所以推测可能是Photo-slam的优化与改进方法&#xff0c;接下来具体看看改进了哪些地方。 文章目录 前言1.背景介绍GS-SLAM方法总结 2.关键…...

15分钟学 Python 第36天 :Python 爬虫入门(二)

Python 爬虫入门&#xff1a;环境准备 在进行Python爬虫的学习和实践之前&#xff0c;首先需要准备好合适的开发环境。本节将详细介绍Python环境的安装、必要库的配置、以及常用工具的使用&#xff0c;为后续的爬虫编写奠定坚实的基础。 1. 环境准备概述 1.1 为什么环境准备…...

Spring:强制登陆与拦截器

1.只使用session验证 &#xff08;1&#xff09;第一步&#xff1a;用户登陆时存储session ApiOperation("用户登陆") PostMapping("/login") public AppResult login(HttpServletRequest request,RequestParam("username") ApiParam("用…...

MySQL-数据库约束

1.约束类型 类型说明NOT NULL非空约束 指定非空约束的列不能存储NULL值 DEFAULT默认约束当没有给列赋值时使用的默认值UNIQUE唯一约束指定唯一约束的列每行数据必须有唯一的值PRIMARY KEY主键约束NOT NULL和UNIQUE的结合&#xff0c;可以指定一个列霍多个列&#xff0c;有助于…...

线性表三——队列queue

#include<bits/stdc.h> using namespace std; int n,m; queue<int> q;int main(){cin>>n>>m;for(int i1;i<n;i) q.push(i);int k0;while(!q.empty()){k;if(k<m)//从队头出来&#xff0c;再次回到队尾{int idq.front();//记录出去的编号 q.pop();…...

算法笔记(十)——队列+宽搜

文章目录 N 叉数的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度在每个树行中找最大值 BFS是图上最基础、最重要的搜索算法之一&#xff1b; 每次都尝试访问同一层的节点如果同一层都访问完了&#xff0c;再访问下一层 BFS基本框架 void bfs(起始点) {将起始点放入队列中;标记…...

webpack配置全面讲解【完整篇】

文章目录 前言webpack 核心包&#xff1a;配置文件导出三种方式&#xff1a;在线配置 webpack配置文件解析&#xff1a;入口&#xff08;Entry&#xff09;&#xff1a;输出&#xff08;Output&#xff09;&#xff1a;加载器&#xff08;Loaders&#xff09;&#xff1a;插件&…...

十、kotlin的协程

协程 基本概念定义组成挂起和恢复结构化并发协程构建器作用域构建器挂起函数阻塞与非阻塞runBlocking全局协程像守护线程 Job的生命周期 常用函数延时和等待启动和取消启动取消 暂停 协程启动调度器启动方式启动模式线程上下文继承的定义继承的公式 协程取消与超时取消挂起点取…...

vscode qt 最新开发环境配置, 基于最新插件 Qt All Extensions Pack

qt 之前发布了vscode qt offical ,但是最新更新中将其升级改为了几个不同的插件&#xff0c;功能更强大 1. 前置条件 qt 已安装 2. 插件安装 打开vscode 插件安装&#xff0c;搜索qt 会看到很多qt插件&#xff0c;直接选择Qt All Extensions Pack 安装 会安装qt环境所需的…...

【MySQL】Ubuntu环境下MySQL的安装与卸载

目录 1.MYSQL的安装 2.MySQL的登录 3.MYSQL的卸载 4.设置配置文件 1.MYSQL的安装 首先我们要看看我们环境里面有没有已经安装好的MySQL 我们发现是默认是没有的。 我们还可以通过下面这个命令来确认有没有mysql的安装包 首先我们得知道我们当前的系统版本是什么 lsb_…...

C# StringBuilder类:高效构建和修改字符串的利器

C# 中的 StringBuilder 类是一个可变的字符序列&#xff0c;用于高效地构建和修改字符串。与字符串&#xff08;string&#xff09;不同&#xff0c;字符串在 C# 中是不可变的&#xff0c;这意味着每次修改字符串&#xff08;如拼接、替换等操作&#xff09;时&#xff0c;都会…...

AVL平衡树(AVL Tree)

**场景&#xff1a;课堂讨论** --- **小明&#xff08;ESFP学生&#xff09;**&#xff1a;张老师&#xff0c;为什么AVL树&#xff08;AVL Tree&#xff09;中的旋转操作这么重要&#xff1f;感觉只是节点的移动&#xff0c;有没有什么实际意义&#xff1f; **张老师&#…...

【python实操】python小程序之两数取大值以及login登录

引言 python小程序之两数取大值以及login登录 文章目录 引言一、两数取大值1.1 题目1.2 代码1.3 代码解释 二、login登录2.1 题目2.2 代码2.3 代码解释 三、思考3.1 两数取大值3.2 login登录 一、两数取大值 1.1 题目 定义一个函数my_max&#xff0c;包含两个参数, 函数的作用…...

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的&#xff0c;因此漏洞一旦存在&#xff0c;危害性会很大。但远程文件包含漏洞的利用条件较为苛刻&#xff1b;因此&#xff0c;在web应用系统的功能设计上尽量不要让前端用户直接传变…...

TIM(Timer)定时器的原理

一、介绍 硬件定时器的工作原理基于时钟信号源提供稳定的时钟信号作为计时器的基准。计数器从预设值开始计数&#xff0c;每当时钟信号到达时计数器递增。当计数器达到预设值时&#xff0c;定时器会触发一个中断信号通知中断控制器处理相应的中断服务程序。在中断服务程序中&a…...

Microsoft Visual Studio有多油饼

#1 Microsoft Visual Studio C 2023&#xff1a; 必须安装在C盘 为啥&#xff1f; 安其他盘能亖啊&#xff1f; 真有病 #2 Microsoft Visual Studio C 2013&#xff1a; 每个硬盘必须都腾出至少8个G的空间 不是我安在这个盘不就是为了其他盘没空间吗&#xff1f; 合着…...

Golang | Leetcode Golang题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; func findMinArrowShots(points [][]int) int {if len(points) 0 {return 0}sort.Slice(points, func(i, j int) bool { return points[i][1] < points[j][1] })maxRight : points[0][1]ans : 1for _, p : range points {if p[0] > …...

Python 从入门到实战35(进程-multiprocessing模块)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;可以熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了turtle库绘制图画操作的相关知识。今天学习一下…...

“米哈游悄然布局未来科技:入股星海图,共绘具身智能机器人新篇章“

米哈游悄然入股具身智能机器人公司:技术布局与未来展望 近日,米哈游阿尔戈科技有限公司宣布入股具身智能机器人公司星海图,这一消息在行业内引起了广泛关注。米哈游,这家以游戏开发而闻名的企业,近年来正逐步扩大其在人工智能和新兴科技领域的投资布局,此次入股星海图正是…...

基于spring boot的篮球论坛系统

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…...

华夏ERP账号密码泄露漏洞

漏洞描述 华夏ERP账号密码泄露漏洞 漏洞复现 FOFA "jshERP-boot" POC IP/jshERP-boot/user/getAllList;.ico...

Android问题笔记五十:构建错误-AAPT2 aapt2-7.0.2-7396180-windows Daemon

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…...

CAD 3dsmax maya等autodesk系列专用卸载修复工具AutoRemove,一键完全彻底卸载删除软件的专用卸载工具

AutoRemove 是一款功能强大的软件卸载工具&#xff0c;专门设计用于彻底清除Autodesk系列软件&#xff0c;如AutoCAD、3ds Max、Revit、Maya、Inventor、Navisworks、civil 3d、sketchbook、Architecture、Electrical、Mechanical、、等&#xff0c;从您的系统中。它通过深度清…...

python中的函数介绍

文章目录 1.函数1.1 语法格式1.2 函数参数1.3 函数的返回值1.4 变量作用域1.5 函数的执行过程1.6 链式调用1.7 嵌套调用1.8 函数栈帧1.9 函数递归1.10 参数默认值1.11 关键词参数 1.函数 无论是编程中的函数还是数学中的函数&#xff0c;本质都是差不多的&#xff0c;丢给函数…...

LinuxO(1)调度算法

概念 在Linux中&#xff0c;O(1)调度算法是一种进程调度算法。O(1)表示算法的时间复杂度是常数级别的&#xff0c;与系统中的进程数量无关。 运行队列结构 他采用了两个运行队列&#xff0c;一个活动队列和一个过期队列。活动队列中的进程是有资格获取CPU时间片的进程&#x…...