八大算法基础思想_h21396577548的博客-CSDN博客_八大算法思想详解
https://blog.csdn.net/h21396577548/article/details/109481334?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%85%AB%E5%A4%A7%E7%AE%97%E6%B3%95%E6%80%9D%E6%83%B3&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-109481334.nonecase&spm=1018.2226.3001.4187
增加记忆数组
(1)有一个提纲,轮廓
(2)做一些重点笔记,把典型题型总结一下
(3)做一些复习
(4)跟好的代码学习
(5)相似的题目一起做,由易到难,一系列内容一起做,每个系列做10多道就可以了,最后做热题
1 先把数据结构与算法的基本题做了32个:
(32条消息) 算法工程师15——数据结构与算法加强版_xiaotiig的博客-CSDN博客
https://blog.csdn.net/xiaotiig/article/details/120721639
2 牛客网:剑指offer
3 牛客网的上周考过
4 力扣top面试题
力扣top100
5 力扣中的几种题型
5.1 路径最短
5.2 股票买卖
5.3 排列组合
联系输入输出:https://www.nowcoder.com/test/27976983/summary
# 1 读取一行
sys.stdin.readline()
# 2 读取剩下所有行,这个有时候会出错
sys.stdin.readlines()
# 3 读取一行,以回车键为标记
a = input()
b, c = a.split(' ')
# 4 strip删去首尾指定字符串https://www.runoob.com/python/att-string-strip.html
# 不放参数默认删除空格和换行符
注意:该方法只能删除开头或是结尾的字符或字符串,不能删除中间部分的字符。
str = "00000003210Runoob01230000000";
print str.strip( '0' ); # 去除首尾字符 0
# 5 安指定字符分割.split(),默认以空格和\n,或\n
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( ); # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
输出
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
# 6 将一行输入分割并转换为数字类型
for _ in range(n):
a,b = list(map(int,input().strip().split()))# 一定要加list
print(a+b)
while True:
try:
a = input()
b, c = a.split(' ')
print(int(b) + int(c))
except:
break
import sys
lines = sys.stdin.readlines()
for i in range(len(lines)):
lines[i] = list(map(int, lines[i].split()))
def add(a, b):
print(a + b)
for i in range(len(lines)):
add(lines[i][0], lines[i][1])
输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 10^9)
n = int(input())
for _ in range(n):
a,b = map(int,input().strip().split())
print(a+b)
import sys
if __name__ == '__main__':
count = int(sys.stdin.readline())
for line in sys.stdin.readlines():
print(sum(list(map(int, line.strip().split()))))
多个测试用例,每个测试用例一行。
每行通过空格隔开,有n个字符,n<100
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
a c bb
f dddd
nowcoder
a bb c
dddd f
nowcoder
import sys
for line in sys.stdin:
l=line.strip().split(" ")
l.sort()
print(" ".join(l))
(1)构建二维表,0的地方补0
(2)填表,分两种情况,一是装这个物体最大价值能是多少,一是不装这个物体最大价值能是多少
(3)把表都填好了
下面的代码有错
# 背包问题
def bag(n,rongliang,weight,value):
"""
填好表
:param n:
:param rongliang:
:param weight:
:param value:
:return:
"""
weight1 = weight.copy()
value1 = value.copy()
weight1.insert(0, 0)
value1.insert(0, 0)
value_mat = [[0 for j in range(rongliang + 1)] for i in range(n + 1)]
for i in range(1,n+1):
for j in range(1,rongliang+1):
value_mat[i][j] = value_mat[i-1][j]
if weight1[i]<=j and value_mat[i][j]<value_mat[i-1][j-weight1[i]] + value1[i]:
value_mat[i][j] = value_mat[i-1][j-weight1[i]] + value1[i]
return value_mat
def show(n,rongliang,weight,value_mat):
wuping = []
select_i = [False for i in range(n+1)]
j = rongliang
for i in range(n,0,-1):
if value_mat[i][j]>value_mat[i-1][j]:
print("出错",i,j,value_mat[i][j])
print("dd",value_mat[i-1][j])
select_i[i] = True
print("减去的值是:",weight[i-1])
j = j-weight[i-1]
for i,v in enumerate(select_i):
if v:
wuping.append(i)
return wuping
if __name__ == '__main__':
# 背包容量
rongliang = 10
# 物品个数
n = 4
# 每个物品重量
weight = [2, 3, 6, 7]
# 每个物品价值
value = [1, 4, 5, 6]
value_mat = bag(n,rongliang,weight,value)
print(value_mat)
max_value = value_mat[n][rongliang]
result = show(n,rongliang,weight,value_mat)
print(max_value)
print(result)
[1] 【动态规划】背包问题_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1K4411X766?from=search&seid=7055198306793056692&spm_id_from=333.337.0.0
[2] 很容易理解的动态规划背包问题讲解_二维矩阵填表_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Mf4y1y7WD?from=search&seid=7055198306793056692&spm_id_from=333.337.0.0
[3] (71条消息) 01背包问题(动态规划)python实现_littlethunder的专栏-CSDN博客
https://blog.csdn.net/littlethunder/article/details/26575417
【动态规划】一次搞定三种背包问题_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1CV411E7Rm?from=search&seid=7055198306793056692&spm_id_from=333.337.0.0
https://www.nowcoder.com/practice/9f15b34a2a944a7798a5340ff0dba8b7?tpId=188&&tqId=38651&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking
给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。
请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。
注意:图中可能 存在负权回路 。
输入格式
第一行包含三个整数n,m,k。
接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。
输出格式
输出一个整数,表示从1号点到n号点的最多经过k条边的最短距离。
如果不存在满足条件的路径,则输出“impossible”。
数据范围
1≤n,k≤500
1≤m≤10000
任意边长的绝对值不超过10000。
3 3 1
1 2 1
2 3 1
1 3 3
n, m, k = map(int, input().split())
edges = []
dist = [float('inf')]*(n+1)
for _ in range(m):
edges.append(list(map(int, input().split())))
def bellmanFord(k):
dist[1] = 0
for _ in range(k):
dist2 = dist.copy()
for a, b, w in edges:
dist[b] = min(dist[b], dist2[a]+w)
bellmanFord(k)
print('impossible') if dist[n] == float('inf') else print(dist[n])
(2)(4条未读私信) 最短路径求和_哔哩哔哩笔试题_牛客网
https://www.nowcoder.com/questionTerminal/e228a521eb274cf58ebb40621119d3df
(3)矩阵的最小路径和_牛客题霸_牛客网
https://www.nowcoder.com/practice/7d21b6be4c6b429bb92d219341c4f8bb?tpId=188&&tqId=38601&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking
算法题3(最小路径和)_GZAY的博客-CSDN博客
https://blog.csdn.net/weixin_44139445/article/details/108523488
LeetCode算法题:最小路径和minPathSum_Mike的博客-CSDN博客
https://blog.csdn.net/weixin_43777983/article/details/101198672
把下面的参考1和2看了就行了,第1个是理论,第2个是跟着学
【1】【北京大学】数据结构与算法Python版(完整版)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1VC4y1x7uv?from=search&seid=4245546755844556440&spm_id_from=333.337.0.0
【2】跟这个学就够了,代码随想录学算法,刷力扣(leetcode)不知道怎么刷?来看看,我把刷题网站上线了!最强刷题攻略!_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1AL4y1H7UH?spm_id_from=333.999.0.0
【1】【新】Leetcode算法刷题思路与教学–基于Python_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Ct4y1a72Sfrom=search&seid=14623980813035598179&spm_id_from=333.337.0.0
【2】LeetCode力扣刷题 | 剑指Offer题解 | 画解算法思路Python3或C++代码实现_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1CK411c7gx?from=search&seid=14623980813035598179&spm_id_from=333.337.0.0
【3】【Python算法+数据结构】适合零基础学习的Python,帮你快速通过大厂_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1tq4y1376m?from=search&seid=16538620868821790748&spm_id_from=333.337.0.0