【leetcode刷题之路】面试经典150题(8)——位运算+数学+一维动态规划+多维动态规划
文章目录
- 20 位运算
- 20.1 【位运算】二进制求和
- 20.2 【位运算】颠倒二进制位
- 20.3 【位运算】位1的个数
- 20.4 【位运算】只出现一次的数字
- 20.5 【哈希表】【位运算】只出现一次的数字 II
- 20.6 【位运算】数字范围按位与
- 21 数学
- 21.1 【双指针】回文数
- 21.2 【数学】加一
- 21.3 【数学】阶乘后的零
- 21.4 【二分】69. x 的平方根
- 21.5 【快速幂】50. Pow(x, n)
- 21.6 【暴力】直线上最多的点数
- 22 一维动态规划
- 22.1 【动态规划】爬楼梯
- 22.2 【动态规划】打家劫舍
- 22.3 【动态规划】单词拆分
- 22.4 【动态规划】零钱兑换
- 22.5 【动态规划】【二分】最长递增子序列
- 23 多维动态规划
- 23.1 【动态规划】三角形最小路径和
- 23.2 【动态规划】最小路径和
- 23.3 【动态规划】不同路径 II
- 23.4 【动态规划】最长回文子串
- 23.5 【动态规划】交错字符串
- 23.6 【动态规划】编辑距离
- 23.7 【三维dp】买卖股票的最佳时机 III
- 23.8 【三维dp】买卖股票的最佳时机 IV
- 23.9 【二维dp】最大正方形
20 位运算
20.1 【位运算】二进制求和
题目地址:https://leetcode.cn/problems/add-binary/description/?envType=study-plan-v2&envId=top-interview-150
按位逆序运算。
class Solution:def addBinary(self, a: str, b: str) -> str:la,lb = len(a)-1,len(b)-1ans = ""flag = 0while la>=0 or lb>=0:num_a = 1 if (la>=0 and a[la]=="1") else 0num_b = 1 if (lb>=0 and b[lb]=="1") else 0cur = num_a + num_b + flagif cur > 1:cur = cur-2flag = 1else:flag = 0ans += str(cur)if la>=0:la -= 1if lb>=0:lb -= 1if flag:ans += "1"ans = ans[::-1]return ans
20.2 【位运算】颠倒二进制位
题目地址:https://leetcode.cn/problems/reverse-bits/description/?envType=study-plan-v2&envId=top-interview-150
详见代码。
class Solution:def reverseBits(self, n: int) -> int:ans = 0for i in range(32):ans = ans << 1ans += n & 1n = n >> 1return ans
20.3 【位运算】位1的个数
题目地址:https://leetcode.cn/problems/number-of-1-bits/description/?envType=study-plan-v2&envId=top-interview-150
详见代码。
class Solution:def hammingWeight(self, n: int) -> int:ans = 0for i in range(32):if n & 1 :ans += 1n = n >> 1return ans
20.4 【位运算】只出现一次的数字
题目地址:https://leetcode.cn/problems/single-number/description/?envType=study-plan-v2&envId=top-interview-150
异或操作。
class Solution:def singleNumber(self, nums: List[int]) -> int:ans = 0for n in nums:ans = ans ^ nreturn ans
20.5 【哈希表】【位运算】只出现一次的数字 II
题目地址:https://leetcode.cn/problems/single-number-ii/description/?envType=study-plan-v2&envId=top-interview-150
方法一:哈希表
方法二:模3运算
# 方法一:哈希表
class Solution:def singleNumber(self, nums: List[int]) -> int:ht = {}for n in nums:if n in ht:ht[n] += 1else:ht[n] = 1for h in ht:if ht[h] == 1:return h
# 方法二:模3运算
class Solution:def singleNumber(self, nums: List[int]) -> int:a,b = 0,0for n in nums:b = (b^n)&(~a)a = (a^n)&(~b)return b
20.6 【位运算】数字范围按位与
题目地址:https://leetcode.cn/problems/bitwise-and-of-numbers-range/description/?envType=study-plan-v2&envId=top-interview-150
找公共前缀。
class Solution:def rangeBitwiseAnd(self, left: int, right: int) -> int:t = 0while left < right:left = left >> 1right = right >> 1t += 1return left << t
21 数学
21.1 【双指针】回文数
题目地址:https://leetcode.cn/problems/palindrome-number/description/?envType=study-plan-v2&envId=top-interview-150
将数字的每一位取出来,然后双指针前后分别判断是否相等。
class Solution:def isPalindrome(self, x: int) -> bool:if x < 0:return Falsenum = []while x>0:n = x % 10num.append(n)x = x // 10left,right = 0,len(num)-1while left < right:if num[left] != num[right]:return Falseleft += 1right -= 1return True
21.2 【数学】加一
题目地址:https://leetcode.cn/problems/plus-one/description/?envType=study-plan-v2&envId=top-interview-150
详见代码。
class Solution:def plusOne(self, digits: List[int]) -> List[int]:l = len(digits)t = 1for i in range(l-1,-1,-1):digits[i] = digits[i] + tif digits[i] > 9:digits[i] -= 10t = 1else:t = 0if t == 1:return [1]+digitselse:return digits
21.3 【数学】阶乘后的零
题目地址:https://leetcode.cn/problems/factorial-trailing-zeroes/description/?envType=study-plan-v2&envId=top-interview-150
统计因子中5的个数即可。
class Solution:def trailingZeroes(self, n: int) -> int:ans = 0while n>0:n = n//5ans += nreturn ans
21.4 【二分】69. x 的平方根
题目地址:https://leetcode.cn/problems/sqrtx/description/?envType=study-plan-v2&envId=top-interview-150
二分查找。
class Solution:def mySqrt(self, x: int) -> int:left,right = 0,x+1while left < right:m = (left+right)//2if m*m == x:return melif m*m < x:left = m+1else:right = mreturn left-1
21.5 【快速幂】50. Pow(x, n)
题目地址:https://leetcode.cn/problems/powx-n/description/?envType=study-plan-v2&envId=top-interview-150
快速幂。
class Solution:def myPow(self, x: float, n: int) -> float:if x == 0.0:return 0.0ans = 1if n < 0:x,n = 1/x,-nwhile n:if n & 1:ans *= xx *= xn = n >> 1return ans
21.6 【暴力】直线上最多的点数
题目地址:https://leetcode.cn/problems/max-points-on-a-line/description/?envType=study-plan-v2&envId=top-interview-150
详见代码。
class Solution:def maxPoints(self, points: List[List[int]]) -> int:n, ans = len(points), 1for i, x in enumerate(points):for j in range(i + 1, n):y = points[j]cnt = 2for k in range(j + 1, n):p = points[k]s1 = (y[1] - x[1]) * (p[0] - y[0])s2 = (p[1] - y[1]) * (y[0] - x[0])if s1 == s2: cnt += 1ans = max(ans, cnt)return ans
22 一维动态规划
22.1 【动态规划】爬楼梯
题目地址:https://leetcode.cn/problems/climbing-stairs/?envType=study-plan-v2&envId=top-interview-150
斐波那契数列求值。
class Solution:def climbStairs(self, n: int) -> int:if n == 1:return 1dp_0,dp_1 = 1,1ans = 0for i in range(2,n+1):ans = dp_0 + dp_1dp_0,dp_1 = dp_1,ansreturn ans
22.2 【动态规划】打家劫舍
题目地址:https://leetcode.cn/problems/house-robber/description/?envType=study-plan-v2&envId=top-interview-150
利用动态规划,首先定义数组 d p [ i ] [ 2 ] dp[i][2] dp[i][2],状态转移如下所示:
- d p [ i ] [ 0 ] dp[i][0] dp[i][0]表示第 i i i家不被偷,则前一家可能被偷,也可能没有被偷,取最大值即可;
- d p [ i ] [ 1 ] dp[i][1] dp[i][1]表示第 i i i家被偷,则前一家一定没有被偷,所以为 d p [ i − 1 ] [ 0 ] + n u m s [ i ] dp[i-1][0]+nums[i] dp[i−1][0]+nums[i]。
最后在第 i i i家的时候取被偷和未被偷之间的最大值即可。
class Solution:def rob(self, nums: List[int]) -> int:n = len(nums)dp_0,dp_1 = 0,nums[0]for i in range(1,n):last_0 = dp_0dp_0 = max(dp_0,dp_1)dp_1 = last_0 + nums[i]return max(dp_0,dp_1)
22.3 【动态规划】单词拆分
题目地址:https://leetcode.cn/problems/word-break/description/?envType=study-plan-v2&envId=top-interview-150
将 w o r d D i c t wordDict wordDict中的单词看成一个个的跳跃长度,代表如果首字母匹配上了,一步可以跳多远,那么最远的距离就是 T r u e True True,最后只需查看满足了所有跳跃规则之后能否到达字符串 s s s的末尾即可。
class Solution:def wordBreak(self, s: str, wordDict: List[str]) -> bool:l = len(s)dp = [False]*(l+1)dp[0] = Truefor i in range(l+1):if dp[i]:for j in range(i+1,l+1):if s[i:j] in wordDict:dp[j] = Truereturn dp[-1]
22.4 【动态规划】零钱兑换
题目地址:https://leetcode.cn/problems/coin-change/description/?envType=study-plan-v2&envId=top-interview-150
动态规划题目的基本做题策略:
- 确定 d p dp dp数组以及下标的含义( d p [ j ] dp[j] dp[j]为凑齐总额为j的钱币的最小次数);
- 确定递推公式( d p [ j ] = m i n ( d p [ j ] , d p [ j − c o i n ] + 1 ) dp[j] = min(dp[j],dp[j-coin]+1) dp[j]=min(dp[j],dp[j−coin]+1));
- d p dp dp数组如何初始化( d p [ 0 ] dp[0] dp[0]为 0 0 0,剩下的初始化为最大钱币金额 + 1 +1 +1);
- 确定遍历顺序。
class Solution:def coinChange(self, coins: List[int], amount: int) -> int:dp = [amount+1]*(amount+1)dp[0] = 0for j in range(1,amount+1):for coin in coins:if j >= coin:dp[j] = min(dp[j],dp[j-coin]+1)if dp[amount] < amount+1:return dp[amount]else:return -1
22.5 【动态规划】【二分】最长递增子序列
题目地址:https://leetcode.cn/problems/longest-increasing-subsequence/description/?envType=study-plan-v2&envId=top-interview-150
方法一:动态规划,构造 d p [ i ] dp[i] dp[i]表示 i i i索引为序列末尾元素的最长序列长度。
方法二:二分查找,维护一个递增序列 a r r arr arr,遍历时取小的放入序列中,最后返回序列长度。
# 动态规划
class Solution:def lengthOfLIS(self, nums: List[int]) -> int:l = len(nums)dp = [1]*ldp_max = 1for i in range(1,l):for j in range(0,i):if nums[j] < nums[i]:dp[i] = max(dp[i],dp[j]+1)dp_max = max(dp_max,dp[i])return dp_max# 二分查找
class Solution:def lengthOfLIS(self, nums: List[int]) -> int:arr = [0]*len(nums)ans = 0for num in nums:left,right = 0,answhile left < right:mid = (left+right) // 2if arr[mid] < num:left = mid + 1else:right = midarr[left] = numif right == ans:ans += 1return ans
23 多维动态规划
23.1 【动态规划】三角形最小路径和
题目地址:https://leetcode.cn/problems/triangle/description/?envType=study-plan-v2&envId=top-interview-150
自底向上进行动态规划,每次都选择下一层的 k k k和 k + 1 k+1 k+1之间最小的数与该层的数相加,最后返回 d p [ 0 ] dp[0] dp[0]即可。
class Solution:def minimumTotal(self, triangle: List[List[int]]) -> int:l = len(triangle)dp = [0]*lfor i in range(len(triangle[-1])):dp[i] = triangle[-1][i]for j in range(l-2,-1,-1):for k in range(j+1):dp[k] = min(dp[k],dp[k+1]) + triangle[j][k]return dp[0]
23.2 【动态规划】最小路径和
题目地址:https://leetcode.cn/problems/minimum-path-sum/description/?envType=study-plan-v2&envId=top-interview-150
每次遍历时找出两个步骤的最小值,然后相加,也是自顶向下的思路。
class Solution:def minPathSum(self, grid: List[List[int]]) -> int:row = len(grid)col = len(grid[0])for i in range(1,col):grid[0][i] += grid[0][i-1]for j in range(1,row):grid[j][0] += grid[j-1][0]for i in range(1,row):for j in range(1,col):grid[i][j] += min(grid[i][j-1],grid[i-1][j])return grid[row-1][col-1]
23.3 【动态规划】不同路径 II
题目地址:https://leetcode.cn/problems/unique-paths-ii/description/?envType=study-plan-v2&envId=top-interview-150
计算可以走到每个格子的路线数,最后相加。
class Solution:def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:row = len(obstacleGrid)col = len(obstacleGrid[0])dp = [[0]*col for _ in range(row)]for i in range(row):for j in range(col):if not obstacleGrid[i][j]:if i == j == 0:dp[i][j] = 1else:up = dp[i-1][j] if i>0 else 0left = dp[i][j-1] if j>0 else 0dp[i][j] = up + leftreturn dp[-1][-1]
23.4 【动态规划】最长回文子串
题目地址:https://leetcode.cn/problems/longest-palindromic-substring/description/?envType=study-plan-v2&envId=top-interview-150
d p [ i ] [ j ] dp[i][j] dp[i][j]表示 s [ i : j + 1 ] s[i:j+1] s[i:j+1]是否为回文子串,状态转移的思路是,如果 d p [ i + 1 ] [ j − 1 ] dp[i+1][j-1] dp[i+1][j−1]为 T r u e True True并且 s [ i ] = = s [ j ] s[i]==s[j] s[i]==s[j]的话,那么 d p [ i ] [ j ] dp[i][j] dp[i][j]也为 T r u e True True,在每个为 T r u e True True的情况下记录此时字符串的长度,同时更新初始坐标,最后选择最长的子串即可。
class Solution:def longestPalindrome(self, s: str) -> str:l = len(s)dp = [[0]*l for _ in range(l)]max_len = 1start = 0for j in range(1,l):for i in range(j):# (j-1)-(i+1) <= 0if j-i <= 2:if s[i] == s[j]:dp[i][j] = 1cur_len = j-i+1else:if s[i] == s[j] and dp[i+1][j-1]:dp[i][j] = 1cur_len = j-i+1if dp[i][j] and cur_len > max_len:max_len = cur_lenstart = ireturn s[start:start+max_len]
23.5 【动态规划】交错字符串
题目地址:https://leetcode.cn/problems/interleaving-string/description/?envType=study-plan-v2&envId=top-interview-150
d p [ i ] [ j ] dp[i][j] dp[i][j]表示 s 1 s_1 s1的前 i i i个字符和 s 2 s2 s2的前 j j j个字符能否构成 s 3 s3 s3的前 i + j i+j i+j个字符。
class Solution:def isInterleave(self, s1: str, s2: str, s3: str) -> bool:l1 = len(s1)l2 = len(s2)l3 = len(s3)if l1 + l2 != l3:return Falsedp = [[False]*(l2+1) for _ in range(l1+1)]dp[0][0] = Truefor i in range(1,l1+1):dp[i][0] = (dp[i-1][0] and s1[i-1]==s3[i-1])for i in range(1,l2+1):dp[0][i] = (dp[0][i-1] and s2[i-1]==s3[i-1])for i in range(1,l1+1):for j in range(1,l2+1):dp[i][j] = (dp[i-1][j] and s1[i-1]==s3[i+j-1]) or (dp[i][j-1] and s2[j-1]==s3[i+j-1])return dp[-1][-1]
23.6 【动态规划】编辑距离
题目地址:https://leetcode.cn/problems/edit-distance/description/?envType=study-plan-v2&envId=top-interview-150
详见代码注释。
class Solution:def minDistance(self, word1: str, word2: str) -> int:l1 = len(word1)l2 = len(word2)# 初始化dp,dp[i][j]表示从word1[:i]到word2[:j]所需要转换的次数dp = [[0]*(l2+1) for _ in range(l1+1)]# 此时word2为空,则word1需要转换的次数为此时的长度for i in range(l1+1):dp[i][0] = i# 此时word2为空,则word1需要转换的次数为此时的长度for j in range(l2+1):dp[0][j] = j# 首先判断i和j索引处的字符是否相同,如果相同,则dp[i][j]=dp[i-1][j-1]# 否则不管是删除还是替换,都会在之前的基础上改变一位字符,# 则dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1for i in range(1,l1+1):for j in range(1,l2+1):if word1[i-1] == word2[j-1]:dp[i][j] = dp[i-1][j-1]else:dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1return dp[-1][-1]
23.7 【三维dp】买卖股票的最佳时机 III
题目地址:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/?envType=study-plan-v2&envId=top-interview-150
详见代码注释。
class Solution:def maxProfit(self, prices: List[int]) -> int:l = len(prices)# dp[第几天][是否持有股票][已经卖了几次股票]dp = [[[0,0,0],[0,0,0]] for _ in range(l)]# 第一天初始化dp[0][0][0] = 0dp[0][0][1] = -float('inf')dp[0][0][2] = -float('inf')dp[0][1][0] = -prices[0]dp[0][1][1] = -float('inf')dp[0][1][2] = -float('inf')# 接下来几天状态更新for i in range(1,l):# 未持有股票,已经卖了0次股票dp[i][0][0] = 0# 未持有股票,已经卖了1次股票:可能是今天卖的,也可能是前几天卖的dp[i][0][1] = max(dp[i-1][1][0]+prices[i],dp[i-1][0][1])# 未持有股票,已经卖了2次股票:可能是今天卖的,也可能是前几天卖的dp[i][0][2] = max(dp[i-1][1][1]+prices[i],dp[i-1][0][2])# 已持有股票,已经卖了0次股票:可能是今天买的,也可能是前几天买的dp[i][1][0] = max(dp[i-1][0][0]-prices[i],dp[i-1][1][0])# 已持有股票,已经卖了1次股票:可能是今天买的,也可能是前几天买的dp[i][1][1] = max(dp[i-1][0][1]-prices[i],dp[i-1][1][1])# 已持有股票,已经卖了2次股票dp[i][1][2] = -float('inf')return max(dp[l-1][0][1],dp[l-1][0][2],0)
23.8 【三维dp】买卖股票的最佳时机 IV
题目地址:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/?envType=study-plan-v2&envId=top-interview-150
详见代码注释。
class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:# dp[第几天][已经完成几笔交易][是否持股]l = len(prices)dp = [[[0]*2 for _ in range(k+1)] for _ in range(l)]for i in range(1,k+1):dp[0][i][1] = -prices[0]for i in range(1,l):for j in range(1,k+1):# 未持股:今天卖掉了,或者昨天也未持股dp[i][j][0] = max(dp[i-1][j][1]+prices[i],dp[i-1][j][0])# 持股:今天买入股票,或者昨天持股dp[i][j][1] = max(dp[i-1][j-1][0]-prices[i],dp[i-1][j][1])return dp[l-1][k][0]
23.9 【二维dp】最大正方形
题目地址:https://leetcode.cn/problems/maximal-square/submissions/515490547/?envType=study-plan-v2&envId=top-interview-150
详见代码注释。
class Solution:def maximalSquare(self, matrix: List[List[str]]) -> int:max_length = 0row = len(matrix)col = len(matrix[0])# dp[i][j]表示matrix[:i][:j]的正方形最大边长dp = [[0]*(col+1) for _ in range(row+1)]# 状态转移为在左、上、左上中取最小值+1,因为需要保证正方形内所有元素均为1for i in range(1,row+1):for j in range(1,col+1):if matrix[i-1][j-1] == "1":dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1max_length = max(max_length,dp[i][j])return max_length*max_length
相关文章:
【leetcode刷题之路】面试经典150题(8)——位运算+数学+一维动态规划+多维动态规划
文章目录 20 位运算20.1 【位运算】二进制求和20.2 【位运算】颠倒二进制位20.3 【位运算】位1的个数20.4 【位运算】只出现一次的数字20.5 【哈希表】【位运算】只出现一次的数字 II20.6 【位运算】数字范围按位与 21 数学21.1 【双指针】回文数21.2 【数学】加一21.3 【数学】…...

JetBrains全家桶激活,分享 WebStorm 2024 激活的方案
大家好,欢迎来到金榜探云手! WebStorm公司简介 JetBrains 是一家专注于开发工具的软件公司,总部位于捷克。他们以提供强大的集成开发环境(IDE)而闻名,如 IntelliJ IDEA、PyCharm、和 WebStorm等。这些工具…...

Sublime 彻底解决中文乱码
1. 按ctrl,打开Console,输入如下代码: import urllib.request,os; pf Package Control.sublime-package; ipp sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHand…...
复旦大学EMBA校友出席两会建言献策助力中国发展
阳春三月,备受瞩目的全国两会如期召开。期间,复旦大学EMBA多位校友作为第十四届全国人民代表大会代表、第十四届全国政协委员与全国各地代表共商国是。 无论是作为大型央企负责人,还是作为科创企业的中坚力量,复旦大学EM…...

virtualbox导入vdi
新建虚拟机 点击新建 输入新建属性 配置cpu和内存 虚拟硬盘 这里选择已有的vdi文件 摘要 这里点击完成 虚拟机添加成功 点击启动,启动虚拟机 注意 这个时候的ip,还是以前镜像的ip,如果两个镜像一起启动,则需要修 改ip地…...

【信号处理】基于DGGAN的单通道脑电信号增强和情绪检测(tensorflow)
关于 情绪检测,是脑科学研究中的一个常见和热门的方向。在进行情绪检测的分类中,真实数据不足,经常导致情绪检测模型的性能不佳。因此,对数据进行增强,成为了一个提升下游任务的重要的手段。本项目通过DCGAN模型实现脑…...
使用 Docker Compose 部署 Spring Boot 应用
使用 Docker Compose 部署 Spring Boot 应用 第一步:创建 Spring Boot 应用的 Dockerfile 在您的 Spring Boot 项目根目录中创建一个 Dockerfile。 编辑 Dockerfile,添加以下内容: # 基础镜像使用 OpenJDK FROM openjdk:11-jdk-slim# 维护者…...
nginx 正向代理 https
问题背景 因为网络环境受限,应用服务器无法直接访问外网,需要前置机上中转一下,这种情况可在应用服务器修改/etc/hosts文件指向前置机,在前置机上的nginx设置四层代理,从而出站。 方案 根据How to Use NGINX as an …...
vue3从其他页面跳转页面头部组件菜单el-menu菜单高亮
主要代码 import { ref, onMounted, watch } from vue; const activeIndex ref("/"); const route useRoute();onMounted(() > {updateActiveMenu(); });watch(() > route.path, updateActiveMenu);function updateActiveMenu() {// 根据路由更新activeMenu…...
python 条件循环语句
python 条件循环语句 一、条件控制语句1. Python3 条件控制2. if 语句3. if 嵌套4. match...case5. 注意: 二、循环控制语句1. Python3 循环语句2. while 循环3. 无限循环4. while 循环使用 else 语句5. 简单语句组6. for 语句7. for...else8. break 和 continue 语…...

CIM搭建实现发送消息的效果
目录 背景过程1、下载代码2、进行配置3、直接启动项目4、打开管理界面5、启动web客户端实例项目6、发送消息 项目使用总结 背景 公司项目有许多需要发送即时消息的场景,之前一直采用的是传统的websocket连接,它会存在掉线严重,不可重连&…...

C++第十三弹---内存管理(下)
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、operator new与operator delete函数 1.1、operator new与operator delete函数 2、new和delete的实现原理 2.1、内置类型 2.2、自定义类型 …...

Python爬虫学习完整版
一、什么是爬虫 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析也成为如今主流的爬取策略。 1 爬虫可以做什么 你可以爬取网络上的的图片&#…...

JavaScript中的继承方式详解
Question JavaScript实现继承的方式? 包含原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承和ES6 类继承 JavaScript实现继承的方式 在JavaScript中,实现继承的方式多种多样,每种方式都有其优势和适用场景。以下…...

Git基础(23):Git分支合并实战保姆式流程
文章目录 前言准备正常分支合并1. 创建两个不冲突分支2. 将dev合并到test 冲突分支合并1. 制造分支冲突2. 冲突合并 前言 Git分支合并操作 准备 这里先在Gitee创建了一个空仓库,方便远程查看内容。 正常分支合并 1. 创建两个不冲突分支 (1…...
为什么有些前端一直用 div 当按钮,而不是用 button?
1. HTML 中的 <div> 和 <button> 在了解为什么有些前端开发者更喜欢使用 <div> 作为按钮之前,让我们先来了解一下 <div> 和 <button> 标签在 HTML 中的作用和区别。 <div>:是 HTML 中的一个通用容器元素࿰…...

python实战之基础篇(一)
1. 注释 # coding utf-8 # 该注释放到文件第一行, 这个注释告诉python解释器该文件的编码集是UTF-82. 导入语句有三种形式 import <模块名> from <模块名> import <代码元素> from <模块名> import <代码元素> as <代码元素别名>3. 获取…...
第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(补题)
文章目录 1 日期统计2 01串的熵3 冶炼金属4 飞机降落5 接龙数列6 岛屿个数7 子串简写8 整数删除9 景区导游10 砍树 前言:时隔一年,再次做这套题(去年参赛选手),差点道心不稳T_T,故作此补题! 1 日期统计 没写出来&…...
蓝桥杯刷题--python-32
4964. 子矩阵 - AcWing题库 from collections import deque n, m, a, b map(int, input().split()) mod 998244353 nums [] for _ in range(n): nums.append(list(map(int, input().split()))) rmin [[0 for i in range(m)] for i in range(n)] rmax [[0 for i in ran…...

单例模式如何保证实例的唯一性
前言 什么是单例模式 指一个类只有一个实例,且该类能自行创建这个实例的一种创建型设计模式。使用目的:确保在整个系统中只能出现类的一个实例,即一个类只有一个对象。对于频繁使用的对象,“忽略”创建时的开销。特点:…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...