自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 leetcode面试经典150题——08买卖股票的最佳时机 II

dp[i]表示到第i天为止,期间能够获得利润的最大值,与只能一天买股票一天卖股票不同,我们不单单只维护该天与历史最低价格的差值,而是要维护一个累加的过程,如果我们该天的价格大于前一天的价格,那么我们就用前一天的最大利润,加累加上前一天买入,该天卖出的利润,表示到该天为止能够获得的最大利润,否则,前一天买入我们dp[i] = dp[i-1],表示不进行操作。解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。

2023-10-19 19:54:27 80

原创 leetcode面试经典150题——07买卖股票的最佳时机

我们是要找价格最低的一天买入,如何价格最高的一天卖出,注意卖出需要在买入之后,那么也就是求数组中差值最大的两个元素,注意这里的差值为后一个元素减前一个元素,因此我们考虑动态规划,dp[i]表示,到第i天,最大的利润,也就是最大的差值,考虑当前元素prices[i],如果prices[i]减去前面最小的元素(为什么要最小,这样能够保证减出来的差值最大)比dp[i-1]还要大,那么dp[i]更新,否则,dp[i] = dp[i-1],那么状态转移方程为。输入:[7,1,5,3,6,4]

2023-10-19 19:03:13 70

原创 leetcode面试经典150题——06轮转数组

假设从位置为i的元素开始,经过n次替换后,到达的位置应该为(i+nk)%n = i,也就是元素i所在的位置,所以我们最多需要n次来达到最初的位置,此种情况也是遍历的数组n个元素,但是我们从一个元素出发开始替换,不一定会遍历到所有元素,此时我们应该从第二个元素开始继续替换,那我们什么时候停止替换呢,答案很明显就是我们替换了n个元素的时候,也就是把每个元素都放在了其最终的位置上的时候,我们停止替换,那么我们需要一个count来记录我们替换的元素的个数。向右轮转 1 步: [7,1,2,3,4,5,6]

2023-10-18 16:49:01 65 1

原创 leetcode面试经典150题——05多数元素

证明:如果该多数不是其中任何一个部分的众数,那么在左边部分出现的次数小于等于l/2,右边部分出现的次数小于等于r/2,那么出现的总次数小于等于l/2+r/2,而l/2+r/2<=(l+r)/2=n/2,则与题意矛盾,结论成立。方法二:用hash_map,由于c++没有hash_map,这里我们用到unordered_map,我们把每一个出现的元素作为键,它出现的次数作为值,并且在每一次查找的过程中判断该键出现的次数是否大于n/2。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

2023-10-12 15:54:27 66 1

原创 leetcode面试经典150题——04删除排序数组中的重复项 II

同样的设置两个指针p1,p2,p1指向新数组的最后一个元素,p2指向待检测的元素,观察到,当nums[i]=nums[i-2],这个时候nums[i]元素是需要删除的,因此我们把p2设置为2,p1设置为0,当p1和p2指向的元素不相等的时候,我们需要把p2的元素覆盖到p1的元素,如果前面没有需要删除的,那么就是覆盖自己本身,如果前面有需要删除的,那么覆盖掉的,就是需要删除的元素。给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

2023-10-11 16:08:15 135

原创 leetcode面试经典150题——03删除有序数组中的重复项

用两个指针p1和p2,p1指向数组第一个元素,p2指向数组第二个元素,p1指向的是第i个不重复元素放置的位置,比较p1和p2所指向的元素,当二者相等时候,p2向后移动,p1不动,当二者不相等时候,这个时候p2指向的元素为第p1+1个不重复的元素,所以应该放在p1+1所指向的元素中(若p2-p1=1则不需要复制),然后让p1,p2都向后移动一位。将数组中所有重复的元素,除了第一个元素以外,把后面出现的重复的元素都做一个标记,也就是只留下第一个重复的元素,然后再用vector的erase删除掉标记的元素。

2023-10-10 20:37:41 187 1

原创 leetode面试经典150题——02移除元素

在方法二中,我们会大量反复赋值需要留下来的元素,考虑题目说可以打乱数组中原来元素的顺序,我们只需要把值为val的元素用后面的元素填充即可,并不需要像方法二那样保持原来数组的顺序不变,因此我们设置两个指针p1,p2,p1指向数组头部,p2指向数组尾部,当p1的值为val时,我们把p2的值赋给p1,p2向左移动一位,当p1的值不为val时,p1向右移动一位,循环结束后,p1指向的是需要留下来的数组元素的最后一位。循环结束后,p2指向新数组的最后一个元素的下一个位置,那么新数组的长度即为p2`

2023-10-09 12:02:47 60 1

原创 leetcode面试经典150题——01合并2个有序数组

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。方法一:借用第三个数组nums3,设置指针i,j指向nums1和nums2,比较两个指针指向的元素,小的存储到nums3中,最后把nums3复制到nums1中。:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

2023-09-26 21:04:50 159 1

原创 Python入门:练习-冒泡排序算法的实现

实现冒泡排序算法1.涉及知识:条件判定语句for循环2.算法步骤:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。3.代码实现x=[1,2,6,0.3,2,0.5,-1,2.4]n=len(x)for i in range(n): for j in range(i):

2021-08-01 16:50:42 141 1

原创 Python入门:Python基础知识之程序流程控制语句

常用操作符算术操作符赋值操作符比较操作符逻辑操作符算术操作符一般会返回一个数,而比较和逻辑操作符会返回布尔值True或False算术操作符+:加法-返回两操作数相加的结果-:减法-返回左操作数减去右操作数的结果*:乘法-返回两操作数相乘的结果/:除法-返回右操作数除左操作数的结果%:模-返回右操作数除左操作数的结果**-指数-对操作指数的计算//:取商-返回右操作数对左操作数取商的结果赋值操作符=:简单的赋值运算符,赋值从右侧操作数到左侧操作数+=:加法AND赋值操

2021-08-01 16:30:38 129

原创 Python入门:列表练习:求曲形图形面积

问题求如图正弦曲线y=sinx从0到2*pi和x轴围成曲形图形的面积涉及的知识点列表的基本操作思路对于这种曲形图形面积的求解,我们可以用到微元法来进行求解,即将图形用n个矩形来代替,如图所示代码实现将各小矩形的高度放置一列表中将各高度乘以宽度,得各矩形面积求和import mathn=100width=2*math.pi/nx=[]y=[]for i in range(n): x.append(i*width)for i in x: y.append(

2021-07-19 15:09:24 2233 1

原创 Python入门:Python基础知识之列表操作

列表(list)all_in_list=[ 1, 'a word', print(1), True, [1,2],]列表中的每个元素都是可变的列表中的元素是有序的、每个元素对应一个位置列表可以容纳Python中的任何对象列表的索引取出列表中的元素,从左往右数从0开始all_in_list=['a','b','c','d']res=all_in_list[0]print(res)结果a从右往左数从-1开始all_in_list=['

2021-07-15 16:22:47 141

原创 Python入门:搭建Python环境

搭建Python环境Python开发环境由三部分组成Python(程序运行基础)第三方类库(功能拓展)编辑器(提高代码编辑效率)安装Python下载地址:https://www.python.org/进入Python官网点击Downloads,选择对应的操作系统,我选择的是windows接下来选择需要的Python版本,推荐选择3.6版本的然后点击Download Windows x86-64 executable installer下载打开下载好的安装包选择add Pyt

2021-07-14 18:18:20 180 4

原创 Python入门:认识Python

认识Python起源Python的作者,Guido von Rossum,荷兰人。1982年,Guido从阿姆斯特丹大学(University of Amsterdam)获得了数学和计算机硕士学位。1991年,第一个Python解释器诞生,它是用C语言实现的,并能够调用C语言的库文件。设计哲学优点:简单、易学免费、开源可扩展性可嵌入型跨平台性丰富的第三方类库缺点:运行速度框架选择太多哪些人在用Pythonweb开发数据分析师数据挖掘工程师自动化运维:批量处理大量的运

2021-07-14 11:59:43 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除