坚持写算法题的第四周

文章讲述了多个编程问题的解决方案,涉及排序、搜索、回溯算法、数列分析、字符串处理和数学计算,展示了如何使用Python解决这些IT技术中的经典问题

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.排列硬币


class Solution:

def arrangeCoins(self, n: int) -> int:

res =1

while res<=n:

n-=res

if n == 0:

return res

res +=1

return res-1

3.分糖果


class Solution:

def distributeCandies(self, candyType: List[int]) -> int:

res = []

for i in candyType :

if len(res)!=len(candyType)/2 and i not in res:

res.append(i)

return len(res)

4.递增的三元子序列


class Solution:

def increasingTriplet(self, nums: List[int]) -> bool:

small, mid = max(nums), max(nums)

for num in nums:

if num <= small:

small = num

elif num <= mid:

mid = num

else:

return True

return False

总结

欠着。。。。。。

2021-11-2

=========

题目

1.值相等的最小索引

2.超过经理的收入工

3.组合总和

4.找出临界值之间的最小和最大距离

题解

1.值相等的最小索引

本题就是一个循环加上一个除于就可以了!!!

2.超过经理的收入工

SQL需要把同一个表用两次,分别命名不同的名字,然后最后来用where找出大于经理的员工!

3.组合总和

本题就是一个经典的回溯加剪枝,这个真的是经典的不能在经典的一个题!!!

我给大家看一下我画的图:

忽略手稿!!!(字太丑)

4.找出临界值之间的最小和最大距离

本题是上周周赛的第二题,一个链表的问题,但是我是把链表里面的数取出来放在数组里面来判断的,判断的两个条件,最后再来筛选!!!

代码

1.值相等的最小索引

class Solution:

def smallestEqual(self, nums: List[int]) -> int:

res=[]

for index , i in enumerate(nums):

if index % 10 == nums[index]:

res.append(index)

return min(res) if len(res) else -1

2.超过经理的收入工

SELECT

a.Name as ‘Employee’

FROM

Employee AS a,

Employee AS b

WHERE

a.ManagerId = b.Id

AND a.Salary > b.Salary;

3.组合总和

class Solution:

def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:

res = []

n = len(candidates)

def trace(res,begin,end,path,tag):

if tag < 0:

return

if tag == 0:

res.append(path)

return

for i in range(begin,end):

trace(res,i,end,path+[candidates[i]],tag - candidates[i])

if n == 0:

return []

trace(res,0,n,[],target)

return res

4.找出临界值之间的最小和最大距离

class Solution:

def nodesBetweenCriticalPoints(self, head: Optional[ListNode]) -> List[int]:

nums = []

p = head

while p:

nums.append(p.val)

p = p.next

n = len(nums)

a = []

for i in range(1,n-1):

if nums[i - 1] > nums[i] < nums[i + 1]:

a.append(i)

elif nums[i - 1] < nums[i] > nums[i + 1]:

a.append(i)

if len(a) <2:

return [-1,-1]

max_ = a[-1] - a[0]

min_ = float(‘inf’)

for i in range(1, len(a)):

min_ = min(min_, a[i] - a[i - 1])

return [min_,max_]

总结

最近感觉有点累了不知道为啥,可能因为专业课多,还要转语言和写博客,时间用不过来,身心疲惫,看着大佬们拿着年薪几十万的offer,总是会有点酸,心里想,我什么时候才能拿着属于自己的offer呢?可能生活在这个快时代,节奏和身心都会被影响吧,太急于求成,我感觉这样并不是很好,一直想找个机会静下来,做自己没有做完的项目,可能等这次活动结束,我就会减少每日的刷题量,来做一些小项目了!!!!


2021-11-3

=========

题目

1.Sqrt(x)

2.爬楼梯

3.无重复字符的最长字串

题解

1.Sqrt(x)

本题思路是当一个数的算数平方根不是整数时,这个数肯定时大于该算数平方根的整数部分的幂乘积,小于整数部分加一的幂乘积,所以我们就遍历来找到这个整数,就是我们想要的数,然后返回!!

2.爬楼梯

这个题我最开始用的时回溯加剪枝,但是到最后我发现这个在数值等于38的时候超时,所以肯定不能用回溯了,还有一个方法就是用斐波那契数列。

3.无重复字符的最长字串

这个题是我之前没有写出来的一个滑块题,因为它的滑块长度是会变化的,最开始我有点把握不住这个长度,看了一些大佬的题解才写出来的。

由于我的表达太差,我还是直接给大家上官方的题解思路吧。

代码

1.Sqrt(x)

class Solution:

def mySqrt(self, x: int) -> int:

if x == 1:

return 1

if x == 0:

return 0

for i in range(x):

if x >=ii and (i+1)(i+1) > x:

return i

2.爬楼梯

class Solution:

def climbStairs(self, n: int) -> int:

def trace(tag,res):

if tag < 0:

return

if tag == 0:

res.append( 1)

return

for i in range(1,3):

trace(tag-i,res)

return len(res)

return trace(n,[])

class Solution:

def climbStairs(self, n: int) -> int:

dp = {}

dp[1] = 1

dp[2] = 2

for i in range(3,n+1):

dp[i] = dp[i-1] + dp[i-2]

return dp[n]

3.无重复字符的最长字串

class Solution:

def lengthOfLongestSubstring(self, s: str) -> int:

if not s : return 0

looku = set()

left = 0

max_len = 0

cur_len = 0

for i in range(len(s)):

cur_len += 1

while s[i] in looku:

looku.remove(s[left])

left += 1

cur_len -=1

looku.add(s[i])

if max_len < cur_len:

max_len = cur_len

return max_len


2021-11-4

=========

题目

1.有效的完全平方数

2.青蛙跳台阶

3.斐波那楔数列

4.旋转数组的最小数字

5.打印从1到n的最大的n位数

题解

1.有效的完全平方数

这个最少需要log(n)的复杂度才能过,o(n)就过不了,我把两个代码都发在下面了。

本题有多种解法,我用的时循环求解,找出最后的i。

2.青蛙跳台阶

这个就是第三题的那个解法,如果用递归的话这个题时会超时的,所以我们用记忆法来求解,大家可以直接看代码。

3.斐波那楔数列

同上。

4.旋转数组的最小数字

在升序表中找到突然下降的那个值就是这个表的最小值。

5.打印从1到n的最大的n位数

太简单了,没有题解。

代码

1.有效的完全平方数

//第一个超时

class Solution1:

def isPerfectSquare(self, num: int) -> bool:

if num == 1:

return True

for i in range(1,num//2+1):

if i*i == num:

return True

return False

class Solution:

def isPerfectSquare(self, num: int) -> bool:

x = 1

square = 1

while square <= num:

if square == num:

return True

x += 1

square = x * x

return False

2.青蛙跳台阶

class Solution:

def numWays(self, n: int) -> int:

if n == 0:

return 1

dp = {}

dp[1] = 1

dp[2] = 2

for i in range(3,n+1):

dp[i] = dp[i-1] + dp[i-2]

return dp[n]%1000000007

3.斐波那楔数列

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

return dp[n]%1000000007

3.斐波那楔数列

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-QVWrMK0C-1713772396776)]

[外链图片转存中…(img-RbYAizQs-1713772396777)]

[外链图片转存中…(img-vjkBG01K-1713772396778)]

[外链图片转存中…(img-0Id1Bhmr-1713772396778)]

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值