代码随想录刷题笔记-哈希表篇

文章目录

    • 242 有效的字母异位词(easy)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 383 赎金信(easy)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 49 字母异位词分组(mid)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 438 找到字符串中所有字母异位词(mid)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 349 两个数组的交集(easy)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 350 两个数组的交集 II(easy)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 202 快乐数(easy)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 1 两数之和(easy)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 454四数相加II(mid)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 15 三数之和(mid)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现
    • 18 四数之和(mid)
      • 力扣地址
      • 题目描述
      • 题目实例
      • 解题思路
      • 代码实现

242 有效的字母异位词(easy)

力扣地址

https://leetcode.cn/problems/valid-anagram/

题目描述

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

题目实例

示例 1: 输入: s = "anagram", t = "nagaram" 输出: true示例 2: 输入: s = "rat", t = "car" 输出: false说明: 你可以假设字符串只包含小写字母。

解题思路

可以直接用map,然后再遍历map即可,但是纯字母的话,尤其纯大写,纯小写,只有大小写,一般都是用数组代替map,这样开销小,速度快。
题目已知全部都是小写字母,开辟一个26长度的数组,从头向后遍历,数组的下标表示字母,0对于a,以此类推,数组的值表示字母的个数。然后比较这两个数组即可。

代码实现

    public boolean isAnagram(String s, String t) {int[] sNum = new int[26];int[] tNum = new int[26];for (char ch : s.toCharArray()) {sNum[ch - 'a']++;}for (char ch : t.toCharArray()) {tNum[ch - 'a']++;}for (int i = 0; i < 26; i++) {if (sNum[i] != tNum[i]) {return false;}}return true;}

383 赎金信(easy)

力扣地址

https://leetcode.cn/problems/ransom-note/

题目描述

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。

题目实例

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

解题思路

就是判断其中一个字符的字母的个数全部都大于等于另一个字符的字母的个数,至于业务意义别管了,又不是真的要去抢劫。

和242一样,用数组来代替map。可以跟上一个题一样,判断两个数组是不是其中一个的每一个字母的个数都大于等于另一个,但是这个可以只用一个数组即可。
初始状态:
将其中一个字符s按照数组进行组装。
下标是字母,数组值是个数。
过程状态:
遍历另一个字符串t,当遇到同样的就抵消掉,也就是数组的值–,如果数组的值小于0,那就说明组成不了。
结束状态:
过程状态没有返回false的话,那说明组成的了,返回true即可。

代码实现

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

49 字母异位词分组(mid)

力扣地址

https://leetcode.cn/problems/group-anagrams/description/

题目描述

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

题目实例

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

解题思路

将每一个排序以后的是一样的划分成一组,然后返回即可。用stream的group by就行,就不需要手写了。

代码实现

    public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> stringListMap = Arrays.stream(strs).collect(Collectors.groupingBy(item -> {char[] arr = item.toCharArray();Arrays.sort(arr);return String.valueOf(arr);}));return new ArrayList<>(stringListMap.values());}

438 找到字符串中所有字母异位词(mid)

力扣地址

https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/

题目描述

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

题目实例

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

解题思路

依旧是两个数组表示两个字符串,下标是字母,下标对应的值是个数。
s是长串,p的短串
初始状态:
从0开始遍历到p,统计两个数组是不是一致的,一致的话,先把下标0加入
过程状态:
从p的长度位置开始遍历,下标 - p的长度的索引对应的字母个数–,下标对应的索引字符个数++,相当于一个固定的窗口,窗口左边弹出,个数–,窗口右边加入,个数++
理解成一个窗口 [x,y,z],g x,[y,z,g]这个时候就把x对应的个数–,g就要加加
结束状态:
返回统计的下标即可

代码实现

        List<Integer> res = new ArrayList<>();int sLen = s.length();int pLen = p.length();// 边界判断,如果s都没p长,怎么可能p是s的子串if (sLen < pLen) {return res;}int[] sMap = new int[26];int[] pMap = new int[26];for (int index = 0; index < pLen; index++) {sMap[s.charAt(index) - 'a']++;pMap[p.charAt(index) - 'a']++;}if (Arrays.equals(sMap, pMap)) {res.add(0);}for (int index = pLen; index < sLen; index++) {// 理解成一个窗口 [x,y,z],g  x,[y,z,g]这个时候就把x对应的个数--,g就要加加sMap[s.charAt(index - pLen) - 'a']--;sMap[s.charAt(index) - 'a']++;if (Arrays.equals(sMap, pMap)) {res.add(index - pLen + 1);}}return res;}

349 两个数组的交集(easy)

力扣地址

https://leetcode.cn/problems/intersection-of-two-arrays/description/

题目描述

给定两个数组 nums1 和 nums2 ,返回 它们的 
交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。提示:1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000

题目实例

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

解题思路

解法一:实际开发建议选择朴实无华的。
用stream的fifter过滤掉包含nums2的即可
解法二:
值不会超过1000,那开个1001长的数组,把下标当这个值,下标的值当成个数即可。
开两个数组按照上面的初始化,然后遍历一遍,取两个数组值都大于0的加进结果集合即可。

代码实现

stream实现

    public int[] intersection(int[] nums1, int[] nums2) {// 实际这里肯定是list,用工具类判空if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) {return null;}// 实际list转setSet<Integer> nums2Set = new HashSet<>();for (int item : nums2) {nums2Set.add(item);}Set<Integer> resSet = new HashSet<>();Arrays.stream(nums1).filter(nums2Set::contains).forEach(resSet::add);int[] res = new int[resSet.size()];AtomicInteger index = new AtomicInteger();resSet.forEach(item -> res[index.getAndIncrement()] = item);return res;}
    public int[] intersection(int[] nums1, int[] nums2) {if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) {return null;}// initint[] nums1countArr = new int[1001];int[] nums2countArr = new int[1001];for (int item : nums1) {nums1countArr[item]++;}for (int item : nums2) {nums2countArr[item]++;}Set<Integer> resSet = new HashSet<>();// 过程。两个都有的加入结果集合for (int i = 0; i < 1001; i++) {if (nums1countArr[i] > 0 && nums2countArr[i] > 0) {resSet.add(i);}}// 结果int[] res = new int[resSet.size()];int index = 0;for (Integer item : resSet) {res[index++] = item;}return res;}

350 两个数组的交集 II(easy)

力扣地址

https://leetcode.cn/problems/intersection-of-two-arrays-ii/description/

题目描述

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

题目实例

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

解题思路

用349的思路二,这个要求统计个数最小的,那么就不能用set,用list,然后统计两个数组中小的那个,再把这个个数的数填充答案即可。

代码实现

   public int[] intersect(int[] nums1, int[] nums2) {if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) {return null;}// initint[] nums1countArr = new int[1001];int[] nums2countArr = new int[1001];for (int item : nums1) {nums1countArr[item]++;}for (int item : nums2) {nums2countArr[item]++;}List<Integer> resList = new LinkedList<>();// 过程。两个都有的加入结果集合for (int i = 0; i < 1001; i++) {// 这样写就可以少一层嵌套if (nums1countArr[i] <= 0 || nums2countArr[i] <= 0) {continue;}int minSize = Math.min(nums1countArr[i], nums2countArr[i]);for (int index = 0; index < minSize; index++) {resList.add(i);}}// 结果int[] res = new int[resList.size()];int index = 0;for (Integer item : resList) {res[index++] = item;}return res;}

202 快乐数(easy)

力扣地址

https://leetcode.cn/problems/happy-number/description/

题目描述

编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

题目实例

在这里插入图片描述

解题思路

定义函数f,f可以求出每个数的和。输入是n,输出是每个位置的平方和。 按照题目要求,直到n等于1才结束循环,同时数字是可能重复的,所以要加入一个set来去重。那么就可以得到终止条件

while (n != 1 && !set.contains(n)) {对n进行操作   
}

代码实现

  public boolean isHappy(int n) {Set<Integer> record = new HashSet<>();while (n != 1 && !record.contains(n)) {record.add(n);n = getNextNum(n);}return n == 1;}private int getNextNum(int n) {int res = 0;while (n != 0) {int lastIndexNum = n % 10;res += lastIndexNum * lastIndexNum;n /= 10;}return res;}

1 两数之和(easy)

力扣地址

https://leetcode.cn/problems/two-sum/

题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

题目实例

给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]

解题思路

定义map,key是num[i],value是i,那么当出现map.contains(target - nums[i])的时候,就说明已经找到了。返回这两个下标即可。

代码实现

    public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> numMap = new HashMap<>();for (int i = 0; i < nums.length; i++) {// 如果map里已经有了if (numMap.containsKey(target - nums[i])) {return new int[]{numMap.get(target - nums[i]), i};}// map没有,添加进去numMap.put(nums[i], i);}return new int[]{-1, -1};}

454四数相加II(mid)

力扣地址

https://leetcode.cn/problems/4sum-ii/description/

题目描述

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

题目实例

输入: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

解题思路

统计个数,也不用去重,把前两个数组理解成一个数组,后两个数组理解成一个数组,然后就变成第一题的两数之和的解法。
定义一个map key是两个数组的数的和,value是这两个数的和出现的个数。此时的target就是0。

代码实现

    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {Map<Integer, Integer> mapNum = new HashMap<>();// 前两个当成一个数组for (int i = 0; i < nums1.length; i++) {for (int j = 0; j < nums2.length; j++) {mapNum.put(nums1[i] + nums2[j], mapNum.getOrDefault(nums1[i] +nums2[j], 0) + 1);}}int res = 0;// 后两个当成一个数组for (int i = 0; i < nums3.length; i++) {for (int j = 0; j < nums4.length; j++) {// 然后就变成了两数之和if (mapNum.containsKey(0 - nums4[j] - nums3[i])) {res += mapNum.get(0 - nums4[j] - nums3[i]);}}}return res;}

15 三数之和(mid)

力扣地址

https://leetcode.cn/problems/3sum/description/

题目描述

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。

题目实例

输入: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] 。
注意,输出的顺序和三元组的顺序并不重要。

解题思路

这个是需要去重的,n数之和按照模板来就好了

   public static List<List<Integer>> nSum(int[] nums, int target) {// 先排序List<List<Integer>> res = new ArrayList<>();// n - 2 层for循环for (int i = 0; i < nums.length; i++) {// 当前的值大于target,还大于target,减枝if (nums[i] > 0 && nums[i] > target) {return res;}// 去重if (i > 0 && nums[i] == nums[i - 1]) {continue;}for (int j = i + 1; j < nums.length; j++) {// 去重,剩下还有层数以此类推即可if (j > i + 1 && nums[j] == nums[j - 1]) {continue;}// n - 2层for循环+这个核心逻辑int left = j + 1;int right = nums.length - 1; while (left < right) {// 这里一定是long,防止越界long sum = nums[i] + nums[j] + nums[left] + nums[right];if (sum > target) {right--;} else if (sum < target) {left++;} else {// 记得一定是new出来的,否则值不会变res.add(new ArrayList<>(Arrays.asList(nums[i], nums[j], nums[left], nums[right])));// 去重while (left < right && nums[left] == nums[left + 1]) {left++;}// 去重while (left < right && nums[right] == nums[right - 1]) {right--;}left++;right--;}}}}return res;}

代码实现

这里的target相当于是0,直接省略

    public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> res = new ArrayList<>();if (nums.length == 0) {return res;}Arrays.sort(nums);// n - 2层for循环,n是3,只需要一层for (int i = 0; i < nums.length; i++) {// taget = 0,两个条件一致了,省略掉一个if (nums[i] > 0) {return res;}if (i > 0 && nums[i] == nums[i - 1]) {continue;}int left = i + 1;int right = nums.length - 1;while (left < right) {long sum = nums[i] + nums[left] + nums[right];if (sum > 0) {right--;} else  if (sum < 0) {left++;} else {res.add(new ArrayList<>(Arrays.asList(nums[i], nums[left], nums[right])));while (left < right && nums[left] == nums[left + 1]) {left++;}while (left < right && nums[right] == nums[right - 1]) {right--;}left++;right--;}}}return res;}

18 四数之和(mid)

力扣地址

https://leetcode.cn/problems/4sum/

题目描述

给你一个由 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]]

解题思路

同上

代码实现

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> res = new ArrayList<>();Arrays.sort(nums);for (int i = 0; i < nums.length; i++) {if (nums[i] > target && nums[i] > 0) {return res;}if (i > 0 && nums[i] == nums[i - 1]) {continue;}for (int j = i +1; j < nums.length; j++) {if (j > i + 1 && nums[j] == nums[j - 1]) {continue;}int left = j + 1;int right = nums.length - 1;while (left < right) {long sum = nums[i] + nums[j] + nums[left] + nums[right];if (sum > target) {right--;} else if (sum < target) {left++;} else {res.add(new ArrayList<>(Arrays.asList(nums[i], nums[j], nums[left], nums[right])));while (left < right && nums[left] == nums[left + 1]) {left++;}while (left < right && nums[right] == nums[right - 1]) {right--;}left++;right--;}}}}return res;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/345547.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3038. 相同分数的最大操作数目 I(Rust模拟击败100%Rust用户)

题目 给你一个整数数组 nums &#xff0c;如果 nums 至少 包含 2 个元素&#xff0c;你可以执行以下操作&#xff1a; 选择 nums 中的前两个元素并将它们删除。 一次操作的 分数 是被删除元素的和。 在确保 所有操作分数相同 的前提下&#xff0c;请你求出 最多 能进行多少次…

SpringBoot整合钉钉实现消息推送

前言 钉钉作为一款企业级通讯工具&#xff0c;具有广泛的应用场景&#xff0c;包括但不限于团队协作、任务提醒、工作汇报等。 通过Spring Boot应用程序整合钉钉实现消息推送&#xff0c;我们可以实现以下功能&#xff1a; 实时向指定用户或群组发送消息通知。自定义消息内容…

Python进阶-部署Flask项目(以TensorFlow图像识别项目WSGI方式启动为例)

本文详细介绍了如何通过WSGI方式部署一个基于TensorFlow图像识别的Flask项目。首先简要介绍了Flask框架的基本概念及其特点&#xff0c;其次详细阐述了Flask项目的部署流程&#xff0c;涵盖了服务器环境配置、Flask应用的创建与测试、WSGI服务器的安装与配置等内容。本文旨在帮…

【iOS】——Runtime学习

文章目录 一、Runtime介绍二、Runtime消息传递三、实例对象、类对象、元类对象四、isa_t结构体的具体实现五、cache_t的具体实现六、class_data_bits_t的具体实现七、Runtime消息转发动态方法解析备用接收者完整消息转发 一、Runtime介绍 iOS的Runtime&#xff0c;通常称为Obj…

使用汇编和proteus实现仿真数码管显示电路

proteus介绍&#xff1a; proteus是一个十分便捷的用于电路仿真的软件&#xff0c;可以用于实现电路的设计、仿真、调试等。并且可以在对应的代码编辑区域&#xff0c;使用代码实现电路功能的仿真。 汇编语言介绍&#xff1a; 百度百科介绍如下&#xff1a; 汇编语言是培养…

【通俗易懂的Python入门基础详细教程,可分享哦!!!】

Python&#xff0c;作为一种高级编程语言&#xff0c;自其诞生以来就以其独特的魅力吸引了无数开发者。以下是对学习Python的简要介绍&#xff1a; 一、Python的起源与发展 Python由荷兰计算机科学家吉多范罗苏姆于1990年代初设计&#xff0c;其设计初衷是作为ABC语言的替代品…

计算机网络复习题

期末题库复习1 一. 单选题&#xff08;共32题&#xff0c;100分&#xff09; 1. (单选题) 在脉冲起始时刻&#xff0c;有无跳变来表示“0”和“1”&#xff0c;且在脉冲中间时刻始终发生跳变的编码是&#xff08; &#xff09;。 A.非归零码 B.曼彻斯特编码 C.归零码 D.差…

Facebook革新:数字社交的下一个阶段

在数字化时代&#xff0c;社交网络已经成为人们生活中不可或缺的一部分。作为全球最大的社交网络平台之一&#xff0c;Facebook一直在不断创新&#xff0c;引领着数字社交的发展。然而&#xff0c;随着科技的不断进步和社交需求的变化&#xff0c;Facebook正在走向一个新的阶段…

k8s和deepflow部署与测试

Ubuntu-22-LTS部署k8s和deepflow 环境详情&#xff1a; Static hostname: k8smaster.example.net Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 605a74a509724a88940bbbb69cde77f2 Virtualization: vmware Operating System: U…

STM32F103C8移植uCOSIII并以不同周期点亮两个LED灯(HAL库方式)【uCOS】【STM32开发板】【STM32CubeMX】

STM32F103C8移植uC/OSIII并以不同周期点亮两个LED灯&#xff08;HAL库方式&#xff09;【uC/OS】【STM32开发板】【STM32CubeMX】 实验说明 将嵌入式操作系统uC/OSIII移植到STM32F103C8上&#xff0c;构建两个任务&#xff0c;两个任务分别以1s和3s周期对LED进行点亮—熄灭的…

基于Python + Flask+ Mysq实现简易留言板

使用Python Flask Mysql实现简易留言板&#xff0c;包括网友编辑留言、修改留言&#xff0c;删除留言、分页显示四大功能。 写出留言板建设过程&#xff0c;包括开发使用工具、留言板模块设计、数据库设计、页面设计、关键技术。 留言板建设过程总结 一&#xff0e;开发使用…

一文学习yolov5 实例分割:从训练到部署

一文学习yolov5 实例分割&#xff1a;从训练到部署 1.模型介绍1.1 YOLOv5结构1.2 YOLOv5 推理时间 2.构建数据集2.1 使用labelme标注数据集2.2 生成coco格式label2.3 coco格式转yolo格式 3.训练3.1 整理数据集3.2 修改配置文件3.3 执行代码进行训练 4.使用OpenCV进行c部署参考文…

燃料电池汽车践行者

前言 见《氢燃料电池技术综述》 见《燃料电池工作原理详解》 见《燃料电池发电系统详解》 见《燃料电池电动汽车详解》 见《氢燃料电池汽车行业发展》 现代汽车&#xff08;中国&#xff09; 现代汽车集团&#xff0c;自1998年成立氢燃料电池研发小组以来深耕氢燃料电池技术&am…

Python爬虫入门与登录验证自动化思路

1、pytyon爬虫 1.1、爬虫简介 Python爬虫是使用Python编写的程序&#xff0c;可以自动访问网页并提取其中的信息。爬虫可以模拟浏览器的行为&#xff0c;自动点击链接、填写表单、进行登录等操作&#xff0c;从而获取网页中的数据。 使用Python编写爬虫的好处是&#xff0c;…

IGraph使用实例——线性代数计算(blas)

1 概述 在图论中&#xff0c;BLAS&#xff08;Basic Linear Algebra Subprograms&#xff09;并不直接应用于图论的计算&#xff0c;而是作为一套线性代数计算中通用的基本运算操作函数集合&#xff0c;用于进行向量和矩阵的基本运算。然而&#xff0c;这些基本运算在图论的相…

LangChain基础知识入门

LangChain的介绍和入门 1 什么是LangChain LangChain由 Harrison Chase 创建于2022年10月&#xff0c;它是围绕LLMs&#xff08;大语言模型&#xff09;建立的一个框架&#xff0c;LLMs使用机器学习算法和海量数据来分析和理解自然语言&#xff0c;GPT3.5、GPT4是LLMs最先进的代…

矩阵LU分解的应用

矩阵LU分解在机器学习和深度学习中的应用广泛&#xff0c;主要用于解决以下问题&#xff1a; 线性方程组求解&#xff1a;LU分解可以有效地解决线性方程组&#xff0c;这在训练模型时非常有用。矩阵求逆&#xff1a;在一些机器学习算法中&#xff0c;需要进行矩阵求逆操作&…

289M→259M得物包体积治理实践

一、前言 iOS应用的包体积大小是衡量得物性能的重要指标&#xff0c;过大包体积会降低用户对应用的下载意愿&#xff0c;还会增加用户的下载等待时间以及用户手机的存储空间&#xff0c;本文重点介绍在包体积治理中的新思路以及原理与实践。 二、原理介绍 Macho产物测试 我…

Autodesk 3ds Max软件下载安装;3ds Max功能强大的三维建模、渲染软件安装包获取

3ds Max&#xff0c;无论是初学者还是资深设计师&#xff0c;都能通过3ds Max在数字世界中实现自己的创意&#xff0c;打造出令人惊叹的三维作品。 在3ds Max中&#xff0c;灯光系统是至关重要的一环。它提供了光度学灯光和标准灯光两种主要类型&#xff0c;用于照亮和增强场景…

CleanMyMac2028永久破解版苹果mac电脑垃圾清理软件

CleanMyMac&#xff0c;这款苹果mac电脑垃圾清理软件简直就是我的救星啊&#xff01;以前总是被电脑上的各种垃圾文件困扰&#xff0c;不知道如何彻底清理。自从用了CleanMyMac&#xff0c;我的电脑就像重新获得了新生一样&#xff01; 它的功能强大到让我惊叹不已&#xff01;…