力扣题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

相关推荐
shymoy38 分钟前
Radix Sorts
数据结构·算法·排序算法
风影小子1 小时前
注册登录学生管理系统小项目
算法
黑龙江亿林等保1 小时前
深入探索哈尔滨二级等保下的负载均衡SLB及其核心算法
运维·算法·负载均衡
起名字真南1 小时前
【OJ题解】C++实现字符串大数相乘:无BigInteger库的字符串乘积解决方案
开发语言·c++·leetcode
lucy153027510791 小时前
【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者
人工智能·科技·单片机·嵌入式硬件·算法·机器学习
杜杜的man1 小时前
【go从零单排】迭代器(Iterators)
开发语言·算法·golang
小沈熬夜秃头中୧⍤⃝1 小时前
【贪心算法】No.1---贪心算法(1)
算法·贪心算法
木向2 小时前
leetcode92:反转链表||
数据结构·c++·算法·leetcode·链表
阿阿越2 小时前
算法每日练 -- 双指针篇(持续更新中)
数据结构·c++·算法
skaiuijing2 小时前
Sparrow系列拓展篇:对调度层进行抽象并引入IPC机制信号量
c语言·算法·操作系统·调度算法·操作系统内核