11. 盛最多水的容器
https://leetcode.cn/problems/container-with-most-water/
题目:
给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
审题:
1.第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
2.找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水
3.你不能倾斜容器:左右两根线以最短的那一根为基准线
思路概述:
首先呢一遇到数组求区域最大值,一般首先想到双指针来做。
定义一个左右指针。假定初始Max_area就是左右指针的面积。然后左右指针分别移动(移动矮的这一个,如果相同的话移动任意一个)。然后重新计算area的值并与上一次的进行比较更新。
代码:
def Maxarea(height):
ans=0 # 后续方便与area进行更新比较
left=0 # 左指针
right=len(height)-1 # 右指针
while left<right:
max_area=(right-left)*min(height[left],height[right]) # 计算第一次的area值
ans=max(ans,max_area) # 比较更新
if height[left]<height[right]:
left+=1
elif height[left]==height[right]: # 如果left与right高度相同,随便移动哪一个
left+=1
else:
right-=1
return ans
题目 2672:
蓝桥杯2022年第十三届省赛真题-字符统计
https://www.dotcpp.com/oj/problem2672.html
题目:
审题:
1.输出其中出现次数最多的字母
2.如果有多个字母均出现了最多次,按字母表顺序依次输出所有这些字母(字母序)
思路:
没思路,用暴力吧。最后写一半发现暴力好像也不知道怎么个暴力法儿
就想着看看能不能有一种方法是这样的['字母','出现次数']。嗯哼这个好像有点熟悉这不就是字典么{'键':'值'}。试试?试试就试试
查阅字典资料发现:字典.get('键',0)+1方法
# 假设d={'a':1,'b':2}
d[c]=d.get(i,0)+1
本来c这个键是不在字典d中的,但是通过get方法可以将c添加到字典d中并把它的值赋为1
# d[a]=d.get(i,0)+1
如果a这个键是存在与字典d中的,通过此方法可以把它的值加一
d={'a':2;'b':2}
d={} # 声明一个字典
for i in s:
d[i]=d.get(i,0)+1
# 如果这个键不存在,就添加这个键在字典中并且把其值赋为1
# 如果这个键存在,就把它的值加一
d={'B':3,'A':3,'C':2}
这不就完美符合了我的预期了么
例如样例:BABBACAC
就变为了:{'B':3,'A':3,'C':2}只需要输出它的键就可以了
但是,题中说了如果有多个字母均出现了最多次,按字母表顺序依次输出所有这些字母(字母序)
因为字典是不支持排序的,所以将其转化为列表排序
d={'B':3,'A':3,'C',2}
# 不能使用强制转化
d=list(d)
d=['B','A','C']
# 字典(dict)是无序的,它的键(key)和值(value)是没有固定顺序的。当你使用list()函数将一个字典转换为列表时,只会保留字典的键,并且返回的列表是按照键的插入顺序排列的。
应该使用
d=list(d.items())
# d=[('B',3),('A',3),('C',2)]
排序:
d.sort(k=lambda x:x[0]) # 先将列表按照字母的字典序排序
d.sort(k=lambda x:x[1],reverse=True) # 将列表按出现次数逆序排序
输出:
maxn=d[0][1]
for i in range(len(d)):
if i[1]<maxn:
break
print(i[0],end='')
完整代码:
s=input()
d={}
for i in s:
d[i]=d.get(i,0)+1
d=list(d.items())
d.sort(key=lambda x:x[0])
d.sort(key=lambda x:x[1],reverse=True)
maxn=d[0][1]
for i in ld:
if i[1] <maxn:
break
print(i[0],end="")
总结:
j今天的题都很简单(有一道难题想了1个小时没做出来)。在做题的时候一定要仔细审题。还有对于一些基础数据结构一定要清晰。加油明天继续更新