力扣题11~15

题11(中等):

思路:

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

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

python代码

class Solution:

def maxArea(self, height: List[int]) -> int:

left=0

right=len(height)-1

max_area=0

while left<right:

h=min(height[left],height[right])

w=right-left

area=h*w

max_area=max_area if max_area>area else area

if height[left]<height[right]:

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: List[str]) -> str:

pub_str=''

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

k=strs[0][i]

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

if k!=strs[j][i]:

return pub_str

pub_str+=k

return pub_str

题15(中等):

思路:

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

python代码:

class Solution:

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

nums.sort()

result=[]

n_len=len(nums)

for i in range(len(nums)):

pos=i

if nums[i] > 0:

break

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

if i > 0 and nums[i] == nums[i-1]:

continue

left=pos+1

right=n_len-1

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

while left<right:

if nums[pos]+nums[left]+nums[right]>0:

right-=1

n_len-=1

else:

break

while left<right:

total = nums[i] + nums[left] + nums[right]

if total==0:

result.append([nums[pos],nums[left],nums[right]])

while left < right and nums[left] == nums[left + 1]:

left += 1

while left < right and nums[right] == nums[right - 1]:

right -= 1

left += 1

right -= 1

elif total>0:

right-=1

else:

left+=1

return result

相关推荐
SoraLuna5 分钟前
「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解
开发语言·算法·macos·cangjie
liujjjiyun28 分钟前
小R的随机播放顺序
数据结构·c++·算法
¥ 多多¥39 分钟前
c++中mystring运算符重载
开发语言·c++·算法
trueEve1 小时前
SQL,力扣题目1369,获取最近第二次的活动
算法·leetcode·职场和发展
天若有情6732 小时前
c++框架设计展示---提高开发效率!
java·c++·算法
ahadee2 小时前
蓝桥杯每日真题 - 第19天
c语言·vscode·算法·蓝桥杯
Reese_Cool2 小时前
【数据结构与算法】排序
java·c语言·开发语言·数据结构·c++·算法·排序算法
加密新世界2 小时前
优化 Solana 程序
人工智能·算法·计算机视觉
不爱说话郭德纲3 小时前
探索LLM前沿,共话科技未来
人工智能·算法·llm
飞升不如收破烂~3 小时前
redis的map底层数据结构 分别什么时候使用哈希表(Hash Table)和压缩列表(ZipList)
算法·哈希算法