代码随想录算法训练营第五天 | 哈希表系列1(哈希表理论基础--有效的字母异位词--快乐数)

news2024/11/24 7:56:50

哈希表系列1

  • 哈希表理论基础
  • 242 有效的字母异位词
    • 读题小记
    • 代码随想录的代码
    • 力扣的示例代码
  • 基于242的拓展题目--383赎金信
    • 我的代码
    • 力扣的示例代码
    • 代码随想录的代码
  • 49 字母异位词分组
    • 力扣中录友的代码
    • 我的代码
    • 力扣的示例代码
  • 438 找到字符串中所有字母异位词
    • 我的代码
    • 力扣录友的代码
    • 力扣的示例代码
  • 349 两个数组的交集
    • 代码随想录的代码
    • 力扣的示例代码
  • 350 两个数组的交集 II
    • 我的代码
    • 力扣的示例代码
  • 202 快乐数
    • 我的代码
    • 代码随想录的代码
    • 力扣的示例代码

哈希表理论基础

哈希表之前从没学过,也不知道怎么在编程语言中使用,理论基础没什么要总结的,因为代码随想录中的知识点我都是第一次接触。这里把链接列出来。

哈希表理论基础

242 有效的字母异位词

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

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

示例1:
输入: s = “anagram”, t = “nagaram”
输出: true

示例2:
输入: s = “rat”, t = “car”
输出: false

读题小记

第一次做哈希表的相关题目,不知道如何想,不知道代码如何编写,直接学习代码随想录的想法,并抄写代码。

242 有效的字母异位词

代码随想录的代码

Python写法一:使用数组

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        record = [0] * 26
        for i in s:
            #并不需要记住字符a的ASCII,只要求出一个相对数值就可以了
            record[ord(i) - ord("a")] += 1
        for i in t:
            record[ord(i) - ord("a")] -= 1
        for i in range(26):
            if record[i] != 0:
                #record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。
                return False
        return True

Python写法二(没有使用数组作为哈希表,只是介绍defaultdict这样一种解题思路):

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        from collections import defaultdict
        
        s_dict = defaultdict(int)
        t_dict = defaultdict(int)
        for x in s:
            s_dict[x] += 1
        
        for x in t:
            t_dict[x] += 1
        return s_dict == t_dict

Python–defaultdict学习:
defaultdict是对Python中字典dict的改善。

如果是字典dict:用法是dict={},添加元素是dict[element]=value,调用是dict[element],但是前提是element是存在于字典的,不然会报错误KeyError错误。

对于这种情况,defaultdict就可以避免这个错误,defaultdict的作用是在于,当字典里的element不存在但被查找时,返回的不是keyError而是一个默认值,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0。

用法

Python写法三(没有使用数组作为哈希表,只是介绍Counter这种更方便的解题思路):

class Solution(object):
    def isAnagram(self, s: str, t: str) -> bool:
        from collections import Counter
        a_count = Counter(s)
        b_count = Counter(t)
        return a_count == b_count

Python–Counter学习:
详细内容知乎链接。
Counter

力扣的示例代码

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        ji = set(s)
        if ji != set(t):
            return False
        for d in ji:
            if s.count(d) != t.count(d):
                return False
        return True

基于242的拓展题目–383赎金信

给你两个字符串:ransomNote 和 magazine ,判断 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

我的代码

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        record =  [0]*26
        for i in magazine :
            record[ord(i)-ord('a')] += 1
        for i in ransomNote :
            record[ord(i)-ord('a')] -= 1
        for i in range(26):
            if record[i] < 0:
                return False
        return True

力扣的示例代码

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        set_ransomNote = list(set(ransomNote))
        for i in set_ransomNote:
            if ransomNote.count(i)>magazine.count(i):
                return False
        return True

代码随想录的代码

版本一:使用数组

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        ransom_count = [0] * 26
        magazine_count = [0] * 26
        for c in ransomNote:
            ransom_count[ord(c) - ord('a')] += 1
        for c in magazine:
            magazine_count[ord(c) - ord('a')] += 1
        return all(ransom_count[i] <= magazine_count[i] for i in range(26))

版本二:使用defaultdict

from collections import defaultdict

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:

        hashmap = defaultdict(int)

        for x in magazine:
            hashmap[x] += 1

        for x in ransomNote:
            value = hashmap.get(x)
            if not value or not value:
                return False
            else:
                hashmap[x] -= 1

        return True

版本三:使用字典

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        counts = {}
        for c in magazine:
            counts[c] = counts.get(c, 0) + 1 # get(c, 0)不存在则返回0,如果不给第二个参数,不存在返回KeyError
        for c in ransomNote:
            if c not in counts or counts[c] == 0:
                return False
            counts[c] -= 1
        return True

版本四:使用Counter

from collections import Counter

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        return not Counter(ransomNote) - Counter(magazine)

版本五:使用count

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        return all(ransomNote.count(c) <= magazine.count(c) for c in set(ransomNote))
       

49 字母异位词分组

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

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

示例1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

示例2:
输入: strs = [“”]
输出: [[“”]]

示例3:
输入: strs = [“a”]
输出: [[“a”]]

力扣中录友的代码

版本一:用了Python内置函数sorted,那时间复杂度就是O(n^2 logn)了吧。

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        res = []
        dic = {}
        for s in strs:
            keys = "".join(sorted(s))
            if keys not in dic:
                dic[keys] = [s]
            else:
                dic[keys].append(s)
        return list(dic.values())

版本二:用质数表示26个字母,把字符串的各个字母相乘,这样可保证字母异位词的乘积必定是相等的。其余步骤就是用map存储。

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        map = {
            'a':2,'b':3,'c':5,'d':7,'e':11,'f':13,'g':17,'h':19,'i':23,'j':29,'k':31,'l':37,'m':41,
            'n':43,'o':47,'p':53,'q':59,'r':61,'s':67,'t':71,'u':73,'v':79,'w':83,'x':89,'y':97,'z':101
        }
        resmap={}
        reslist = []
        for str in strs:
            m = 1
            for i in range(len(str)):
                m*=map[str[i]]
            if  not m in resmap:
                resmap[m]=[]
            resmap[m].append(str)
        print(resmap.values())
        return [j for j in resmap.values()]

我的代码

第一次做这道题的时候,想的还是像前面题使用的逻辑,先对每一个字符串建立一个26长度的record,然后通过两层循环,去判断是否相等。

但是这样写,时间复杂度就有些高了,因为判断是否相等这一个操作也是O(n)的。

这种写法,不仅空间复杂度大,时间复杂度也大。

就不写出这种垃圾代码了。

力扣的示例代码

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        d = {}
        for st in strs:
            key = ''.join(sorted(st))
            if key in d:
                d[key].append(st)
            else:
                d[key] = [st]
        return list(d.values())        

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

给定两个字符串 s 和 p,找到 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:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        slen = len(s)
        plen = len(p)
        p = sorted(p)
        res = []
        if slen < plen :
            return res
        else :
            diff = slen - plen
            for i in range(diff+1):
                temp = s[i:i+plen]
                
                if sorted(temp) == p :
                    res.append(i)
        return res   

力扣录友的代码

翻了前两页的评论,就找到这一个Python3的,和力扣的示例代码逻辑一致,还是要灵活学习运用哈希的思想。

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
    	if len(s) < len(p):
    		return []
    	Num = []
    	n = len(p)
    	A = [0] * 26
    	for i in range(n):
    		A[ord(p[i]) - ord('a')] += 1
    		A[ord(s[i]) - ord('a')] -= 1
    	if A == [0] * 26:
    		Num.append(0)
    	for i in range(n, len(s)):
    		A[ord(s[i]) - ord('a')] -= 1
    		A[ord(s[i - n]) - ord('a')] += 1
    		if A == [0] * 26:
    			Num.append(i + 1 - n)
    	return Num

力扣的示例代码

看了示例代码,还是这个代码好啊,时间复杂度低,而且也是应用了哈希的思想,学习!!!

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        s_len, p_len = len(s), len(p)
        
        if s_len < p_len:
            return []

        ans = []
        s_count = [0] * 26
        p_count = [0] * 26
        for i in range(p_len):
            s_count[ord(s[i]) - 97] += 1
            p_count[ord(p[i]) - 97] += 1

        if s_count == p_count:
            ans.append(0)

        for i in range(s_len - p_len):
            s_count[ord(s[i]) - 97] -= 1
            s_count[ord(s[i + p_len]) - 97] += 1
            
            if s_count == p_count:
                ans.append(i + 1)

        return ans

349 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

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

示例2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

代码随想录的代码

要注意,使用数组来做哈希的题目,是因为题目都限制了数值的大小。

而这道题目没有限制数值的大小,就无法使用数组来做哈希表了。

而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。

此时就要使用另一种结构体了,set 。

直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。

不要小瞧 这个耗时,在数据量大的情况,差距是很明显的。

(版本一) 使用字典和集合

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
    # 使用哈希表存储一个数组中的所有元素
        table = {}
        for num in nums1:
            table[num] = table.get(num, 0) + 1
        
        # 使用集合存储结果
        res = set()
        for num in nums2:
            if num in table:
                res.add(num)
                del table[num]
        
        return list(res)

(版本二) 使用数组

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        count1 = [0]*1001
        count2 = [0]*1001
        result = []
        for i in range(len(nums1)):
            count1[nums1[i]]+=1
        for j in range(len(nums2)):
            count2[nums2[j]]+=1
        for k in range(1001):
            if count1[k]*count2[k]>0:
                result.append(k)
        return result

(版本三) 使用集合

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        return list(set(nums1) & set(nums2))

力扣的示例代码

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # return list(set(nums1) & set(nums2))
        return list(set(nums1).intersection(set(nums2)))

350 两个数组的交集 II

给你两个整数数组 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]

我的代码

有了前一道题的铺垫,这道题做起来就很简单,因为输出结果可以重复,所以set方法是不能用的,要用字典数据结构作为哈希base。

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        table = {}
        for num in nums1:
            table[num] = table.get(num, 0) + 1
        
        # 使用集合存储结果
        res = []
        for num in nums2:
            if num in table:
                res.append(num)
                table[num] -= 1
                if table[num] == 0:
                    del table[num]
        
        return res

力扣的示例代码

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        ret = []
        len1 = len(nums1)
        len2 = len(nums2)
        if len1 <= len2:
            first = nums1
            second = nums2
        else:
            first = nums2
            second = nums1

        hash_table = {}
        for i, v in enumerate(first):
            if v not in hash_table:
                hash_table[v] = 1
            else:
                hash_table[v] += 1
        for w in second:
            if w in hash_table and hash_table[w] > 0:
                ret.append(w)
                hash_table[w] -= 1
        return ret

202 快乐数

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

「快乐数」 定义为:

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

示例1:
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例2:
输入:n = 2
输出:false

我的代码

第一次看题,有一个一直困扰我思路的问题是:我如何加入一个判断条件来避免无限循环的出现?

后来看了解析发现是读题问题。。。题中说了,如果不是快乐数,一定会出现无限循环。。。那这样就可以判断了。

自己写的垃圾代码,时间上才击败了7%。

class Solution:
    def isHappy(self, n: int) -> bool:
        sum_list = []
        count = 0
        while count not in sum_list and count != 1:
            count = self.every_sum(n)
            sum_list.append(count)
            n = count  
            count = self.every_sum(n)

        if count == 1:
            return True
        else :
            return False

    def every_sum(self,n:int) -> int :
            count = 0
            while n > 0 :
                rem = n % 10
                count = count + rem * rem
                n = n // 10
            return count   

代码随想录的代码

(版本一)使用集合

class Solution:
    def isHappy(self, n: int) -> bool:        
        record = set()

        while True:
            n = self.get_sum(n)
            if n == 1:
                return True
            
            # 如果中间结果重复出现,说明陷入死循环了,该数不是快乐数
            if n in record:
                return False
            else:
                record.add(n)

    def get_sum(self,n: int) -> int: 
        new_num = 0
        while n:
            n, r = divmod(n, 10)
            new_num += r ** 2
        return new_num

(版本二)使用集合

class Solution:
   def isHappy(self, n: int) -> bool:
       record = set()
       while n not in record:
           record.add(n)
           new_num = 0
           n_str = str(n)
           for i in n_str:
               new_num+=int(i)**2
           if new_num==1: return True
           else: n = new_num
       return False

(版本三)使用数组

class Solution:
   def isHappy(self, n: int) -> bool:
       record = []
       while n not in record:
           record.append(n)
           new_num = 0
           n_str = str(n)
           for i in n_str:
               new_num+=int(i)**2
           if new_num==1: return True
           else: n = new_num
       return False

(版本四)使用快慢指针

class Solution:
   def isHappy(self, n: int) -> bool:        
       slow = n
       fast = n
       while self.get_sum(fast) != 1 and self.get_sum(self.get_sum(fast)):
           slow = self.get_sum(slow)
           fast = self.get_sum(self.get_sum(fast))
           if slow == fast:
               return False
       return True
   def get_sum(self,n: int) -> int: 
       new_num = 0
       while n:
           n, r = divmod(n, 10)
           new_num += r ** 2
       return new_num

(版本五)使用集合+精简

class Solution:
   def isHappy(self, n: int) -> bool:
       seen = set()
       while n != 1:
           n = sum(int(i) ** 2 for i in str(n))
           if n in seen:
               return False
           seen.add(n)
       return True

(版本六)使用数组+精简

class Solution:
   def isHappy(self, n: int) -> bool:
       seen = []
       while n != 1:
           n = sum(int(i) ** 2 for i in str(n))
           if n in seen:
               return False
           seen.append(n)
       return True

力扣的示例代码

class Solution:
    #不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。

    def isHappy(self, n: int) -> bool:
        while True:
            s=str(n)
            sum=0
            for item in s:
                sum+=int(item)*int(item)
            if sum==1:
                return True
            if sum==4:
                return False
            n=sum

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四、交换网络实验2——创建VLAN及端口配置

更多网络基础内容可见: 网络基础学习目录及各章节指引 4.6.2 创建VLAN及端口配置 实验目的 学习VLAN的创建删除 实验工具 Cisco Packet Tracer 实验环境 安装模拟器的Windows系统 实验步骤 第一步,vlan的创建

【实战】 六、用户体验优化 - 加载中和错误状态处理(上) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(八)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理1.给页面添加 …

web接口开发与测试——你了解多少

目录 前言 Django快速开发之投票系统 编写接口文档 系统接口测试 总结&#xff1a; 前言 最近一直在学习和整理web开发与接口测试的相关资料。接口测试本身毫无任何难度&#xff0c;甚至有很多工具和类库来帮助我们进行接口测试。大多测试人员很难深入了解web接口测试的原…

自然语言生成:解决低频Tokens退化整个Tokens模型问题

Rare Tokens Degenerate All Tokens:Improving Neural Text Generation via Adaptive Gradient Gating for Rare Token Embeddings 摘要 最近的研究发现&#xff0c;大规模神经语言模型学到的Token embeddings&#xff08;令牌嵌入&#xff09;具有退化的各向异性和狭锥形状。…

MobileNet

MobileNet 文章目录 MobileNet单词重要不重要 摘要MobileNetV1Motivation深度可分离卷积逐通道卷积&#xff08;Depthwise Convolution&#xff09;逐点卷积&#xff08;Pointwise Convolution&#xff09;参数对比计算量对比 V2Inverted ResidualsLinear BottlnecksModel Arch…

使用docker进行upload-labs靶场的安装搭建

由于我是在kali上搭建&#xff0c;默认没有docker服务&#xff0c;这里就从按照docker开始讲解 一、docker按装 1、Linux内核版本查看 #如果你是kali可直接从第四步开始 #安装docker要求内核版本kerner>3.10 #为此&#xff0c;先检查当前Linux系统的内核版本 uname -a2…

分析Spring Boot项目启动慢原因之 《一》打印bean耗时

分析Spring Boot项目启动原因之 一 打印bean耗时 由于项目比较久远&#xff0c;积累的代码犹如屎山&#xff0c;然后项目启动也特别慢&#xff0c;然后产生想要优化一下启动速度&#xff0c;故写了一个Bean启动时的耗时分析&#xff1a;package com.tekrally.assetManagement.u…

【Linux】Haproxy搭建Web群集

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Haproxy搭建Web群集 一、Haproxy概述1.常见的Web集群调度器2.Haproxy应用分析3.Haproxy常用调度算法4.Haproxy的主要特性5.LVS、Nginx、Haproxy的区别 二、Haproxy搭建Web群集…

【算法题解】49. 二叉树的序列化与反序列化

这是一道 困难 题 https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/ 文章目录 题目深度优先搜索&#xff08;前序遍历&#xff09;Java 代码实现Go 代码实现复杂度分析 广度优先搜索&#xff08;层序遍历&#xff09;Java 代码实现Go 代码实现复杂度分析 …

容器的本质是什么

广义上来说&#xff0c;容器技术是动态的容器、静态的镜像和远端的仓库这三者的组合。 容器&#xff0c;就是一个特殊的隔离环境&#xff0c;它能够让进程只看到这个环境里的有限信息&#xff0c;不能对外界环境施加影响。 对于 Linux 操作系统来说&#xff0c;一个不受任何限…

【区块链】常见共识机制汇总

文章目录 公有链PoW - Proof of WorkPoS - Proof of StakeDPoS - Delegate Proof of StakePoA - Proof of Activity - 行动证明PoB - Proof of Burn 联盟链PaxosMulti-PaxosPBFTDDBFTIDBFTHotstuffZyzzyvaPoETCasperOurobrosPoSVMG-DPoSRPCAAlgorandTendermint 私有链 公有链 P…

用python实现扫雷游戏

前言 本人最近在学习python语言&#xff0c;发现python是一门很有意思的语音。python有大量的库&#xff0c;大量的函数&#xff0c;可以实现非常多的功能。尤其是在可视化方面&#xff0c;可以画图&#xff0c;可以弹出窗口。于是我就想着看能不能用python编写一个扫雷游戏。…

5. 创建声卡

代码位置 sound/soc/generic/simple-card.c static int asoc_simple_card_probe(struct platform_device *pdev) {...ret devm_snd_soc_register_card(dev, card);... } asoc_simple_card_probe -> devm_snd_soc_register_card -> snd_soc_register_card int snd_soc_r…

MS1825 SDK 移植指南

1. 概述 MS1825 SDK 支持以下 Macrosilicon 芯片&#xff0c;按照芯片功能组合的不同&#xff0c; SDK 中相关 API 和类型的定义有所 不同&#xff0c;请在该文档 API 和类型说明时特别关注&#xff1a; MS1825 SDK 的作用是帮助用户建立基于 MS1825 的视频输入输…

力扣 17. 电话号码的字母组合

题目来源&#xff1a;https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/ C题解&#xff1a; 递归法。 确定回溯函数参数&#xff1a;首先需要一个字符串s来收集叶子节点的结果&#xff0c;一个字符串数组result保存起来&#xff0c;定义为全局…

78-基于stm32单片机电压电流检测LCD1602显示(程序+原理图+元件清单全套资料)...

资料编号&#xff1a;078 功能介绍&#xff1a;采用stm32单片机作为主控CPU&#xff0c;采用精密电阻分压将高电压分压后接入STM32单片机ADC接口&#xff0c;采用ADC可以采集出当前的电压值&#xff0c;通过功率电阻来测量电路中的电流&#xff0c;通过串联电路电流相同的原理&…

正则表达式 教程与简介 | 一看就懂!!!(一)

目录 一、正则表达式 - 教程 二、 正则表达式的模式 &#xff08;一&#xff09;字面值字符 &#xff08;二&#xff09;特殊字符 &#xff08;三&#xff09;字符类 &#xff08;四&#xff09;元字符 &#xff08;五&#xff09;量词 &#xff08;六&#xff09;边界…

如何进行小红书笔记关键词布局,热词分析!

坐拥2.6亿活跃用户&#xff0c;小红书已经成为品牌宣推、种草的重要平台之一。那么品牌进入平台&#xff0c;如何进行小红书笔记关键词布局&#xff0c;热词分析&#xff01; 一、 如何确定关键词 想要做好小红书关键词布局&#xff0c;首先要明确如何确定关键词。 1、当我们要…

shell判断程序是否运行,守护进程

一、需求 服务部署在linux上&#xff0c;要求服务器上的服务可以一直保持正常运行 二、问题 在linux上部署的微服务&#xff0c;不知道什么原因过一段时间就自己停掉了&#xff0c;无法启动。 三、解决办法 添加angle守护进程&#xff0c;通过定时执行脚本来判断程序是否运行…

为什么对ChatGPT、ChatGLM这样的大语言模型说“你是某某领域专家”,它的回答会有效得多?(一)...

“ 太长不看总结版&#xff1a;LLM大模型的本质在于计算某个词汇后面应该跟着哪些词汇的概率。当问题给定了特定的限定范围后&#xff0c;它能够找到一条相对明确的计算路径&#xff0c;从一系列概率分布中挑选出所需的答案。否则&#xff0c;它会根据最常见且最高概率的组合方…