力扣题11~15

题11(中等):

思路:

这种题目第一眼就是双循环,但是肯定不行滴,o(n^2)这种肯定超时,很难接受。

所以要另辟蹊径,我们先用俩指针(标志位)在最左端和最右端,我们知道这个容器的最大容积是看最短的那条(木桶效应嘛)。如果我们让长的那一条再怎么大,都影响不了容积,所以我们加上底不变的话,要找最大容积,肯定要变短边嘛,动长边又改变不了什么,也就是说这个时候移动长边得到的一定不是。思路打开就写代码

python代码

class Solution:

def maxArea(self, height: Listint) -> int:

left=0

right=len(height)-1

max_area=0

while left<right:

h=min(heightleft,heightright)

w=right-left

area=h*w

max_area=max_area if max_area>area else area

if heightleft<heightright:

left+=1

else:

right-=1

return max_area

题12(中等):

思路:

作为爬虫玩家,这种东西直接给个关系映射就好了啊,谁会去思考4,9特殊情况啊

python代码:

复制代码
class Solution:
    def intToRoman(self, num: int) -> str:
        Roman_str=''
        tran_json={
            1:'I',
            4:'IV',
            5:'V',
            9:'IX',
            10:'X',
            40:'XL',
            50:'L',
            90:'XC',
            100:'C',
            400:'CD',
            500:'D',
            900:'CM',
            1000:'M',
        }
        i=10
        while 1:
            if num<1:
                break
            #获得在各个位的数字
            h_num=num%10
            num=int(num/10)

            if h_num==0:
                i*=10
            elif h_num<4:
                Roman_str=h_num*tran_json[i/10]+Roman_str
                i*=10
            elif h_num==4:
                Roman_str=tran_json[4*i/10]+Roman_str
                i*=10
            elif h_num<9:
                Roman_str=tran_json[5*i/10]+(h_num-5)*tran_json[i/10]+Roman_str
                i*=10
            elif h_num==9:
                Roman_str=tran_json[9*i/10]+Roman_str
                i*=10
        return Roman_str

题13(简单):

思路:

和上面一样,不想那么多,直接用json存下换算规则,就像处理爬虫的字体加密一样,不想什么方法,直接字体识别出键值对来就套用,懒得看什么先转unicode啥的

python代码:

class Solution:

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

R_cout=0

tran_json={

'I':1,

'V':5,

'X':10,

'L':50,

'C':100,

'D':500,

'M':1000

}

ts_json={

'IV':4,

'IX':9,

'XL':40,

'XC':90,

'CD':400,

'CM':900

}

for key,value in ts_json.items():

s=s.replace(key,'|'+str(value))

for key,value in tran_json.items():

s=s.replace(key,'|'+str(value))

R_cout=sum(list(map(int,s.strip('|').split('|'))))

return R_cout

题14(简单):

思路:

双for循环直接解决了

python代码:

class Solution:

def longestCommonPrefix(self, strs: Liststr) -> str:

pub_str=''

for i in range(min(len(s) for s in strs)):

k=strs0i

for j in range(1,len(strs)):

if k!=strsji:

return pub_str

pub_str+=k

return pub_str

题15(中等):

思路:

和前面一个容器的那个一样,用双指针法,我们将nums排好序,固定一个起始的话,如果大的话移动右指针,小的话移动左指针。

python代码:

class Solution:

def threeSum(self, nums: Listint) -> ListList\[int]:

nums.sort()

result=\[\]

n_len=len(nums)

for i in range(len(nums)):

pos=i

if numsi > 0:

break

跳过可能重复的数字,避免重复的三元组

if i > 0 and numsi == numsi-1:

continue

left=pos+1

right=n_len-1

#预处理,如果前两个加最后一个都大的话,就删了最后一个

while left<right:

if numspos+numsleft+numsright>0:

right-=1

n_len-=1

else:

break

while left<right:

total = numsi + numsleft + numsright

if total==0:

result.append(nums\[pos,numsleft,numsright])

while left < right and numsleft == numsleft + 1:

left += 1

while left < right and numsright == numsright - 1:

right -= 1

left += 1

right -= 1

elif total>0:

right-=1

else:

left+=1

return result

相关推荐
无限码力21 分钟前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试
lqqjuly29 分钟前
MLA — 多头潜在注意力深度解析
深度学习·神经网络·算法
吴可可1231 小时前
SolidWorks草图转三维DWG技巧
算法
redaijufeng1 小时前
C++雾中风景7:闭包
c++·算法·风景
小欣加油2 小时前
leetcode287寻找重复数
数据结构·c++·算法·leetcode
尽兴-2 小时前
2.1 向量基础:Embedding、余弦相似度、欧氏距离、向量检索
算法·embedding·欧氏距离·向量检索·余弦相似度
Black蜡笔小新3 小时前
自动化AI算法训练服务器DLTM训推一体工作站赋能多行业智能化升级
人工智能·算法·自动化
怪兽学LLM3 小时前
LeetCode 438 找到字符串中所有字母异位词(Python 固定滑动窗口+字符计数解法)
python·算法·leetcode
满怀冰雪3 小时前
第04篇-双指针算法-从有序数组到回文判断的高频解法
java·算法
CC数学建模3 小时前
2026年江西省研究生数学建模竞赛1题:空间数据分析中的过拟合识别完整思路、代码、模型、文章,全网首发高质量分享!
python·算法·数学建模