暑期练习

news/2024/10/5 9:00:30/文章来源:https://www.cnblogs.com/zzddkkhome/p/18285338

0705

494. 目标和

首先考虑了使用dfs但是结果超时

class Solution:def findTargetSumWays(self, nums: List[int], target: int) -> int:def dfs(nums,target,index,n):if n==index: if target==0:return 1else :return 0return dfs(nums,target-nums[index],index+1,n)+dfs(nums,target+nums[index],index+1,n)return dfs(nums,target,0,len(nums))

接着使用dp得到结果
遍历[-1000,1000]的所有可能性
j + 1000是为了变量的映射
dp[i-1][j + 1000]可以直接跳到dp[i][j + nums[i] + 1000]和dp[i][j - nums[i] + 1000],理由是i-1 \(\rightarrow\) i只需要\(\pm\) nums[i]+1000,原因是dp[i][j]是i个数组成数字j的方案数。

class Solution:def findTargetSumWays(self, nums: List[int], target: int) -> int:n = len(nums)dp = [[0] * 2001 for _ in range(n)]dp[0][nums[0] + 1000] += 1dp[0][-nums[0] + 1000] += 1for i in range(1, n):for j in range(-1000, 1001):if dp[i-1][j + 1000] > 0:dp[i][j + nums[i] + 1000] += dp[i-1][j + 1000]dp[i][j - nums[i] + 1000] += dp[i-1][j + 1000]return dp[n-1][target + 1000]

3115. 质数的最大距离

"""
简单的判断,双指针左右同时搜索,遇到第一个质数就停下,如果两个指针都停下就结束返回结果
需要注意的重点是continue不要忘记,遇到了质数之后指针不需要继续向前,以及while f or r:,应该是两个指针都查找到才停止,只要有一个没有找到就应该继续,所以需要使用or而不是and。
"""
class Solution:def maximumPrimeDifference(self, nums: List[int]) -> int:def is_prime(num):if num <= 1:return Falsefor i in range(2, int(num**0.5) + 1):if num % i == 0:return Falsereturn Truen=len(nums)left=0right=n-1f,r=True,Truewhile f or r:if f:if is_prime(nums[left]):f=Falsecontinueleft+=1if r:if is_prime(nums[right]):r=Falsecontinueright-=1return right-left
//Java
class Solution {public int maximumPrimeDifference(int[] nums) {int n=nums.length;int left=0;int right=n-1;boolean f = true; boolean r = true;while (f || r) {if (f) {if (isPrime(nums[left])) {f = false;continue;}left++;}if (r) {if (isPrime(nums[right])) {r = false;continue;}right--;}}return right - left;
}private boolean isPrime(int num) {if (num <= 1) {return false;}for (int i = 2; i <= Math.sqrt(num); i++) {if (num % i == 0) {return false;}}return true;
}
}

3099. 哈沙德数

//非常基础
class Solution {public int sumOfTheDigitsOfHarshadNumber(int x) {int sum=0;int temp=x;while (temp>0){sum += temp % 10;temp /= 10;}if (x%sum==0){return sum;}else{return -1;}}
}

3033. 修改矩阵

//基础题
class Solution:def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:m=len(matrix)n=len(matrix[0])record=[]ma=[0]*nfor i in range(n):for j in range(m):if matrix[j][i]==-1:record.append([j,i])ma[i]=max(ma[i],matrix[j][i])for j,i in record:matrix[j][i]=ma[i]return matrix

0706

3101. 交替子数组计数

"""
本题重点是理解,dp[i]的状态,我这里假设的是以nums[i]为结尾的子数组为交替子数组的数量,所以结尾需要sum(dp)
装填转移方程为1. 
$$
dp[i]=dp[i-1]+1 if nums[i] != nums[i-1]
dp[i]=1 if nums[i] = nums[i-1]
$$
举[1,2,2,1]作为例子
i=0时显然dp[0]=1,i=1的时候dp[1]=1+1=2{[2],[1,2]两种[1]不算在内,因为假设的是以nums[i]为结尾的子数组为交替子数组的数量)}
dp[2]=1,dp[3]=2
return 1+2+2+1=6
"""
class Solution:def countAlternatingSubarrays(self, nums: List[int]) -> int:n = len(nums)if n == 1:return 1dp= [1] * ndp[1]= 2 if nums[0] != nums[1] else 1for i in range(2,n):if nums[i] != nums[i-1]:dp[i] = dp[i-1]+1else:dp[i] = 1return sum(dp)

接下来是用时和内存的改进,使用滚动数组,因为我们注意到状态只和前一个状态有关也就是dp[i]只会和dp[i-1]有关,因此我们只需要一个参数last记录前一状态即可

class Solution:def countAlternatingSubarrays(self, nums: List[int]) -> int:n = len(nums)res=1if n == 1:return reslast=2 if nums[0]!=nums[1] else 1res+=lastfor i in range(2,n):if nums[i] != nums[i-1]:last = last+1else:last = 1res+=lastreturn res

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

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

相关文章

用StabilityMatrix一键安装Stable Diffusion

Stable Diffusion是2022年发布的深度学习文字到图像生成模型,它既能免费使用,又能部署在本地端,又有非常多的模型可以直接套用,在使用体验上比Midjourney和DALL-E更加强大。Stable Diffusion使用的模型有下列几大类,对照模型网站 https://civitai.com 以形成更直观的认识:…

「代码随想录算法训练营」第四天 | 链表 part2

24.两两交换链表中的节点题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/ 题目难度:中等 文章讲解:https://programmercarl.com/0024.两两交换链表中的节点.html#算法公开课 视频讲解: https://www.bilibili.com/video/BV1YT411g7br 题目状态:有思路,但细节…

【0基础学爬虫】爬虫框架之 feapder 的使用

前言 大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速入门爬虫。 学习爬虫的过程中,一…

PTA题目集7-8的总结

PTA题目集7-8的总结 1.前言: 2.设计与分析: 3.踩坑心得: 4.改进意见: 5.总结 1.前言:PTA题目集7新增了互斥开关,窗帘,多并联电路和多串联电路。由于之前的输入信息中设备的引脚没有作用,所以我的正则表达式只用来提取设备的名字。而互斥开关有三个引脚,不同引脚的电压…

pycharm 动态绘图

_tkinter.TclError: Cant find a usable init.tcl in the following directories:解决办法: 1 打开报错地址所在文件 D:/Program Files/METACOMP/mlib/tcltk8/lib/tcl8.4/init.tcl: version conflict for package "Tcl": have 8.6.9, need exactly 8.4 2 修改init.t…

从零开始教你写一个MLIR Pass

笔者在去年写了一篇LLVM Pass的教程,现在从事MLIR的开发近1年了,写点教程回馈下社区。 MLIR(Multi-Level Intermediate Representation,多层中间表示)是LLVM之父(博士期间开发的LLVM)的Chris Lattner带领团队开发的编译器基础设施,其增强了 LLVM IR表达能力,而且其是关注P…

idm下载

获得百度网盘直链下载链接调用idm谷歌插件获得城盘直链下载链接调用idm谷歌插件 https://ctfile.qinlili.bid/当你的才华配不上你的野心,努力的时候到了!

Arthas进阶-笔记

《Arthas进阶》 学习目标类和类加载器相关的命令 monitor/watch/trace/stack等核心命令的使用 火焰图的生成 Arthas实战案例dump 作用 将已加载类的字节码文件保存到特定目录:logs/arthas/classdump/ 参数数名称 参数说明class-pattern 类名表达式匹配[c:] 类所属 ClassLoader…

域名、备案和HTTPS

有了域名后,可以方便其他人记住并访问12.域名、备案和HTTPS 有了域名后,可以方便其他人记住并访问,历史上不乏大企业花大价钱购买域名的:京东域名换成 JD.com,并且说是为了防止百度吸引流量,为什么? 唯品会买下域名 VIP.COM 或花费千万‍ 域名提供商 如果想要域名,得去…

陪玩app源码,加密算法中密钥生成和读取一览

陪玩app源码,加密算法中密钥生成和读取一览密钥生成与读取密码学随机数密码学随机数算法在安全场景中使用广泛,如:生成对称密钥、盐、iv等,因此相比普通的随机数算法(如线性同余),它需要更高强度的不可预测性,在Java中,使用SecureRandom来生成更安全的随机数,如下:pub…

陪玩小程序源码,不容错过的加密算法整理清单

陪玩小程序源码,不容错过的加密算法整理清单在开发陪玩小程序源码时,可采用的加密算法类型包含:对称加密对称加密算法,使用Cipher类即可,以广泛使用的AES为例,如下:public byte[] encrypt(byte[] data, Key key) {try {Cipher cipher = Cipher.getInstance("AES/CB…

【QT】工程库引用

创建多工程项目创建子项目UI窗体项目创建库工程项目引用库工程添加日志输出类5.1 需要添加特殊配置,否则编译会报错5.2 正确添加配置5.3 日志正常输出5.4 如果缺少5.1步骤,则报如下错误5.5 如果添加了5.1步骤,还是报The process was ended forcefully 找到项目文件,把debug…