- 博客(66)
- 收藏
- 关注
原创 动态规划——环形数组的连续子数组最大和
题目题解求最大和可以反过来先求最小和,最大和跟最小和的数组必定首尾相连,中间不可能有空位,分成两个数组,如果最小和是从尾部跳到首部,那最大和就在数组中间,就是正常的dpmax,如果最大和是从尾部跳到首部,那最小和就在数组中间,就是正常的dpmin,sum-dpmin就是最大和;特殊情况,如果dpmin=sum就代表全是负数,也是正常的dpmax;n = int(input())a = list(map(int,input().split()))dpmax = [0] * ndpmax[0] =
2022-04-18 20:15:35
705
1
原创 动态规划——乘积为正数的最长连续子数组
题目题解pos[i]为到第i个数为止乘积为正数的最长长度;neg[i]为到第i个数为止乘积为负数的最长长度;n = int(input())a = list(map(int,input().split()))pos = [0]*nneg = [0]*nif a[0] > 0: pos[0] = 1elif a[0] < 0: neg[0] = 1res = pos[0]for i in range(1,n): if a[i] > 0:
2022-04-18 20:05:38
318
原创 动态规划——连续子数组的最大乘积
题目题解如果当前数字为正,那到第i-1个的最大乘积乘以当前数字;如果当前数字为负,那到第i-1个的最小乘积乘以当前数字;n = int(input())a =list(map(int, input().split())) dp1 = [float("-inf")]*ndp2 = [float("-inf")]*ndp1[0] = a[0]dp2[0] = a[0]res = dp1[0]for i in range(1,n): dp1[i] = max(dp1[i-1
2022-04-18 20:02:08
342
原创 动态规划——连续子数组的最大和
题目题解n = int(input())a = input().split()for i in range(len(a)): a[i] = int(a[i])dp = [float("-inf")]*ndp[0] = a[0]res = a[0]for i in range(1,n): dp[i] = max(dp[i-1] + a[i],a[i]) res = max(res,dp[i])print(res)
2022-04-18 19:56:50
97
原创 动态规划——最小花费跳台阶
题目题解n = int(input())cost = input().split()for i in range(n): cost[i] = int(cost[i])def func(n): dp = [0]*(n+1) dp[2] = min(cost[0],cost[1]) for i in range(3, n+1): dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]) retu
2022-04-18 19:55:21
135
原创 动态规划——跳台阶扩展
题目题解n = int(input())def func(n): if n <= 2: return n dp = [1]*(n+1) for i in range(2, n+1): j = i dp[i] = 0 for i2 in range(0, j): dp[i] += dp[i2] return dp[n]print(func(n))
2022-04-18 19:52:47
96
原创 动态规划——跳台阶
题目题解n = int(input())def func(n): if n <= 2: return n dp = [1] * (n + 1) for i in range(2, n+1): dp[i] = dp[i-1] + dp[i-2] return dp[n]print(func(n))
2022-04-18 19:27:52
140
原创 动态规划——斐波那契数列
题目题解n = int(input())f1, f2,res =1, 1, 1 if n <= 2: print(res)else: for i in range(n-2): res= f1 + f2 f1 = f2 f2 = res print(res)
2022-04-18 19:25:30
100
原创 排序:leetcode215(中等)——数组中的第K个最大元素
题目题解class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: n = len(nums) - 1 nums = sorted(nums) return nums[n-k+1]
2021-12-17 17:42:10
93
原创 二分:leetcode34(中等)——在排序数组中查找元素的第一个和最后一个位置
题目题解思路:二分二分模板1:while l < r: mid = (l + r)//2 if 条件: r = mid else: l = mid + 1return r二分模板2:while l < r: mid = (l + r + 1)//2 if 条件: l = mid else: r = mid - 1return r根据使用策略使用两种模板,例如本
2021-12-17 17:40:32
97
原创 二分:leetcode69(简单)——Sqrt(x)
题目题解思路:二分,二分模板使用34题模板,循环最后求出第一个平方数大于等于x的值,因为向下取整,所以最后如果是大于,减1,等于直接返回;class Solution: def mySqrt(self, x: int) -> int: l = 0 r = x while l < r: mid = (l + r) // 2 if mid * mid >= x:
2021-12-17 17:33:12
86
原创 双指针:leetcode524(中等)——通过删除字母匹配到字典里最长单词
题目题解思路:双指针,s中包含进dictionary中当前元素,就可以开始判断结果:当前的ch更大就可以替换,或者长度相等时判断字母序;class Solution: def findLongestWord(self, s: str, dictionary: List[str]) -> str: res = "" for ch in dictionary: i = j = 0 while i < len
2021-12-14 17:23:01
3284
原创 双指针:leetcode680(简单)——验证回文字符串 Ⅱ
题目题解思路:因为只允许最多删除一个字母,所以要么删左边,要么删右边,并且删完后只需要判断中间的还没判断的区间就可以;class Solution: def validPalindrome(self, s: str) -> bool: def checkPalindrome(low, high): #判断是否是回文字符串 i, j = low, high while i < j: if
2021-12-14 17:18:45
211
原创 双指针:leetcode633(中等)——平方数之和
题目题解思路:双指针,取平方根的区间,首尾缩小窗口;class Solution: def judgeSquareSum(self, c: int) -> bool: i = 0 j = int(math.sqrt(c)) while i<= j: sum = i*i + j*j if sum > c: j -= 1 if
2021-12-14 17:13:33
520
原创 双指针:leetcode76(困难)——最小覆盖子串
题目题解思路:滑动窗口,need记录t中每个字母的需要数量,needAll记录t的总字母数,两个指针同时从头起步,移动j,确定包含了t的所有字母,再移动i,计算最小的窗口;得到当前的最小窗口后再移动i,继续求下一个满足条件的窗口;class Solution: def minWindow(self, s: str, t: str) -> str: need = collections.defaultdict(int) for c in t:
2021-12-14 17:09:20
441
原创 双指针:leetcode142(中等)——环形链表2
题目题解思路:floyd判圈法;# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def detectCycle(self, head: ListNode) -> ListNode: fast, slow
2021-12-14 16:56:17
333
原创 双指针:leetcode88(简单)——合并两个有序数组
题目题解思路:合并进新数组,剩下的那个数组一起合并进去,再赋值给nums1;class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ nums3 = list()
2021-12-14 16:51:40
881
原创 双指针:leetcode167(简单)——两数之和2-输入有序数组
题目题解思路:首尾指针向内收缩,比target大,就收缩尾指针,比target小,就收缩首指针,等于就返回;class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: nums = list() x, y = 0, len(numbers)-1 while x < y: if numbers[x] + numb
2021-12-14 15:08:14
371
原创 C#索引器
class Program { static void Main(string[] args) { Sentence s = new Sentence(); Console.WriteLine(s[3]); s[3] = "kangaroo"; Console.WriteLine(s[3]); } } class Sentence ...
2021-11-30 17:02:37
164
原创 贪心:leetcode665(中等)——非递减数列
题目题解思路:三个数:i-2, i-1, i; 如果nums[i-1]>nums[i],并且nums[i-2]<=nums[i],那么最佳的方式是将nums[i-1]的值设为nums[i]的值,因为nums[i-1]的值越大,对前面的元素影响就越小;修改nums[i]可能会影响到后面的还未遍历的元素;但是如果nums[i-2]>nums[i], 就不可能让nums[i-1]在大于等于nums[i-2]的同时又小于等于nums[i],此时只能修改nums[i]的值为nums[i-1]
2021-11-26 18:25:08
122
原创 贪心:leetcode406(中等)——根据身高重建队列
题目题解思路:用纸笔多尝试几次不难发现排序的规律,我的尝试方法是:首先身高最高的必定存在k=0,以这个为基准可以发现排序的规律;例如示例数组:[[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]];先选[7,0],接着[7,1]放[7,0]后面,然后[6,1]、[5,0]、[5,2]…这么排的原因是,先排高的人,再插入矮个子就不会对现有元素的k造成影响;class Solution: def reconstructQueue(self, peop
2021-11-26 18:16:31
358
原创 贪心:leetcode122(中等)——买卖股票2
题目题解思路:官方贪心题解虽然求不出怎么交易的,但是可以求出最大的利润,方法是只要是正向区间就加入到利润里,这样就是一直在盈利;class Solution: def maxProfit(self, prices: List[int]) -> int: n = len(prices) money = 0 for i in range(1, n): money += max(0, prices[i]-prices[
2021-11-26 18:06:03
71
原创 贪心:leetcode763(中等)——划分字母区间
题目题解思路:单开一个数组记录每个字母最后出现的位置,对于遍历到的字母,记录它出现的最后位置为end,每次遍历都更新end,如果已经遍历到end的位置,就说明从start到end为止的字母为一个区间,其中的字母都不可能会在后面再出现,把它加入数组;class Solution: def partitionLabels(self, s: str) -> List[int]: last = [0]*26 for i,ch in enumerate(s):
2021-11-26 17:57:00
97
原创 贪心:leetcode452(中等)——用最少数量的箭引爆气球
题目题解思路:一把箭要穿过最多的区间,那它一定在某个区间的最右侧,如果下个区间不在这个区间的范围,就换新箭,并且位置更新为下个区间的尾部class Solution: def findMinArrowShots(self, points: List[List[int]]) -> int: points.sort(key=lambda x: x[1]) pos = points[0][1] ans = 1 for ballo
2021-11-26 17:49:24
76
原创 贪心:leetcode605(简单)——种花问题
题目题解思路:官方的题解主要是数学规律的查找,prev为上一朵种植的花的位置:1.如果位置 i 为1且前面都为0,可以种 i//2 朵花;如前面有 1 , 可以种 (i-prev-2)//2 朵花;如果遍历的过程中count>=n,就直接结束,不需要再计算2.最后一个区间为最后的1的右侧区间,可以种(m-prev-1)//2 朵花;3.特殊情况:整个数组都是0,可以种(m+1)//2 朵花;class Solution: def canPlaceFlowers(self, fl
2021-11-26 17:36:54
257
原创 贪心:leetcode435(中等)——无重叠区间
题目题解思路:一个区间越小,就能留出更多的空间分给其他区间。如果后面一个区间的头小于前面一个区间的尾,就移除后面的区间;如果不需要移除,就把它们两合并成新的区间;class Solution: def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int: intervals.sort(key=lambda x: x[1]) removed=0; right=inte
2021-11-26 17:17:29
470
原创 贪心:leetcode135(困难)——分发糖果
题目题解思路:1.首先每个人至少一块糖果2.循环两遍数组,从左往右,右边分高的至少比左边多一块;从右往左,因为这个时候可能左边分比右边高的同时糖果比右边多,这个时候维持原状,糖果比右边少的话就要比右边多一个class Solution: def candy(self, ratings: List[int]) -> int: n = len(ratings) nums = [1]*n #每人最少有一块 for i in rang
2021-11-26 17:01:28
100
原创 贪心:leetcode135(简单)——分发饼干
题目题解思路:每个孩子给满足条件的最小的饼干class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int: g.sort() s.sort() i = j = count = 0 while i < len(g) and j < len(s): if g[i] <= s[j]:
2021-11-26 16:54:12
175
原创 Cinemachine使用
根据BeaverJoe教程总结笔记,素材来源:https://www.bilibili.com/video/BV1oa4y1s7gg创建相机后主相机会自动添加Brain组件,主相机决定使用哪个虚拟相机,虚拟相机的数值会同步调整到主相机上,主相机无法手动控制:此时相机已经会自动跟随物体;选择相机跟随哪个物体,一般2Dfollow,3Dlookat:Body部分save during play:退出运行后会保存运行时的数值;x、y、z Damping控制缓慢移动的速度,值越大越慢;决定相机
2021-07-11 14:48:33
1125
原创 Post Processing组件安装和参数使用、Timeline
文章目录安装Ambient Occlusion 环境光遮蔽Bloom 辉光效果Chromatic Aberration 色差效果Vignette 边角压暗Depth of Field 景深Motion Blur 运动模糊Lens Distortion 镜头扭曲Panini Projection 帕尼尼投影其他的概念Dithering 抖色Anti-Aliasing 反锯齿颜色效果Tonemapper 色调映射White Balance 白平衡ToneHue vs HueHue vs SatSat vs
2021-07-09 12:34:48
1245
原创 Unity——射线检测
文章目录定义种树其他应用定义参数对应起始点、终点、碰撞信息、射线长度、可碰撞的层,函数返回值为布尔; Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit hitInfo, float distance, int LayerMask);其中,起始点和终点参数可以封装在ray中: //transform.forward为物体自身z轴朝向,会随物体旋转改变,Vector3.forward为固定的世界空间z轴
2021-07-07 19:46:38
740
1
原创 Unity Shader总结(十六)——PBS(环境光照、实时光源、反射探针 )
文章目录金属工作流高光反射工作流光照面板反射探针探针类型互相反射要先在Edit–Project Settings–Player–Other Settings–Color Space中选择Linear,因为基于物理的渲染需要使用线性空间;金属高光反射强,非金属漫反射强金属工作流Albedo对应物体的整体颜色高光反射工作流Albedo定义了表面的漫反射强度;光照面板mode中实时光照比较耗费性能,改为baked会将光照效果烘焙到光照纹理(lightmap)中,但动态的物体的阴影无法改变,最
2021-07-07 15:16:37
1027
原创 Unity Shader总结(十六)——Unity渲染优化(批处理、LOD)
文章目录CPU1.动态批处理2.静态批处理3.共享材质4.应用场景GPU一、减少需要处理的顶点数目优化几何体LOD技术遮挡剔除技术二、减少需要处理的片元数目控制绘制顺序当心半透明物体减少实时光照和阴影三、节省带宽减少纹理大小利用分辨率缩放四、减少计算复杂度shader的LOD技术优化代码CPU1.动态批处理优点:一切处理unity自动完成,物体可以移动;缺点:限制很多,可能无法动态批处理一些使用了相同材质的物体;原理:每一帧把可以批处理的模型网格合并,再把合并后的模型数据给GPU,然后使用同一个材
2021-07-06 17:05:08
1574
1
原创 Unity Shader总结(十五)——噪声(火焰、水面、缥缈雾效)
文章目录消融效果水波效果缥缈雾效消融效果// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Unity Shaders Book/Chapter 15/Dissolve" { Properties { _BurnAmount ("B
2021-07-06 15:25:09
932
原创 Unity Shader总结(十四)——卡通和素描风格的渲染
文章目录卡通渲染渲染轮廓线高光实现素描风格渲染许多游戏使用非真实感渲染(NPR)的方法渲染游戏画面,例如卡通和水彩风格等;卡通渲染渲染轮廓线这里使用过程式几何轮廓线渲染:使用两个Pass,第一个Pass使用轮廓线颜色渲染整个背面的面片,并在视角空间下把模型顶点沿着法线方向向外扩张一段距离,让背部轮廓线清晰可见;为了防止对于一些内凹的模型,背面面片遮挡正面面片的情况,在扩张背面顶点之前,先对顶点法线的z分量处理,使它们等于一个定值,然后把法线归一化后再对顶点扩张,使扩展后的背面更加扁平化,降低了遮挡正
2021-07-06 14:25:32
669
原创 Unity Shader总结(十三)——深度和法线纹理、改进的运动模糊和边缘检测及高度雾的生成
文章目录如何获取查看运动模糊基于屏幕后处理的全局雾效边缘检测深度纹理实际就是一张渲染纹理,它里面存储的像素值是一个高精度的深度值,范围是[0,1],非线性分布;如何获取脚本中:深度:camera.depthTextureMode = DepthTextureMode.Depth深度+法线:camera.depthTextureMode = DepthTextureMode.DepthNormals深度和深度+法线:camera.depthTextureMode | = DepthTextureM
2021-07-06 10:48:25
408
原创 Unity Shader总结(十二)——屏幕后处理
文章目录建立屏幕后处理脚本调整屏幕亮度、饱和度和对比度边缘检测实现描边高斯模糊Bloom效果运动模糊建立屏幕后处理脚本首先创建脚本检查当前脚本是否支持,绑定在摄像机上;后面的屏幕特效继承该类即可;using UnityEngine;using System.Collections;[ExecuteInEditMode][RequireComponent (typeof(Camera))]public class PostEffectsBase : MonoBehaviour { // C
2021-07-05 13:12:26
492
1
原创 Unity Shader总结(十一)——纹理动画
序列帧动画勾选纹理的Alpha is Transparency属性,并设置水平和竖直方向的数目,赋给创建的Quad// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Unity Shaders Book/Chapter 11/Image Sequence Animation" { Properties { _Color ("Color Tint", Color) =
2021-07-05 10:21:28
300
原创 Unity序列化和反序列化——二进制、JSON、XML
序列化可以将对象转换为字节序列后存储在数据库、内存或者文件中;File类静态类,对文件进行操作,静态方法提供文件的创建、复制、剪切、打开,可以直接赋值到FileStream类。命名空间为System.IOFileStream类用来读取和写入操作系统文件,将文件的内容以字节流的形式呈现出来进行操作,可以读取(Load)、写入(Save)、关闭(Close)文件流,用完记得关闭文件流;BinaryFormattter类以二进制格式序列化和反序列化对象。通常数据会保存到硬盘中,所以即使之后推出运行模式
2021-07-02 15:38:18
1814
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人