力扣16~20题

题16(中等):

思路:

双指针法,和15题差不多,就是要排除了,如果total<target则排除了更小的(left右移),如果total>target则排除了更大的(right左移)

python代码:

复制代码
class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        nums.sort()
        sum=nums[0]+nums[1]+nums[2]
        for i in range(len(nums)):
            if i>0 and nums[i]==nums[i-1]:
                continue
            left = i + 1
            right = len(nums) - 1
            while left < right:
                total=nums[i]+nums[left]+nums[right]
                if abs(target-total)<abs(target-sum):
                    sum=total
                if total<target:
                    left+=1
                elif total>target:
                    right-=1
                else:
                    return target
        return sum

题17(中等):

思路:

枚举列出来就好了,能过就行,虽然时间复杂度有点

python代码:

class Solution:

def letterCombinations(self, digits: str) -> List[str]:

if digits=='':

return []

btn_json={

'1':'',

'2':'abc',

'3':'def',

'4':'ghi',

'5':'jkl',

'6':'mno',

'7':'pqrs',

'8':'tuv',

'9':'wxyz',

}

res_list=['']

for i in digits:

res=btn_json[i]

tmp_list=res_list

res_list=[n+j for n in tmp_list for j in res]

return res_list

题18(中等):

思路:

两数和,三数和,三数接近,这几题好玩吧,没尽兴就又来了一个4数和,一样的

python代码

class Solution:

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

nums.sort()

res_list=[]

for i in range(len(nums)):

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

continue

tmp_target=target-nums[i]

for j in range(i+1,len(nums)):

if j>i+1 and nums[j]==nums[j-1]:

continue

left=j+1

right=len(nums)-1

while left<right:

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

if total==tmp_target:

res_list.append([nums[i],nums[j],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<tmp_target:

left+=1

else:

right-=1

return res_list

题19(中等):

思路:

这个用c应该比较容易理解

python代码:

Definition for singly-linked list.

class ListNode:

def init(self, val=0, next=None):

self.val = val

self.next = next

class Solution:

def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:

n_len=1

p=head

while 1:

if p.next!=None:

n_len+=1

p=p.next

else:

break

pos=n_len-n

p=head

if pos==0:

head=head.next

return head

for i in range(pos-1):

p=p.next

p.next=p.next.next

return head

题20(简单):

思路:

这个就是金典的栈的运用啊,我之前还有一个文章是表达式的转换来着

python代码:

class Solution:

def isValid(self, s: str) -> bool:

s_stack=[]

for i in s:

if i=='(' or i=='{' or i=='[':

s_stack.append(i)

elif i==')':

if len(s_stack)!=0 and s_stack[-1]=='(':

s_stack.pop()

else:

return False

elif i == '}':

if len(s_stack)!=0 and s_stack[-1] == '{':

s_stack.pop()

else:

return False

elif i == ']':

if len(s_stack)!=0 and s_stack[-1] == '[':

s_stack.pop()

else:

return False

if len(s_stack)==0:

return True

else:

return False

相关推荐
XiaoLeisj17 分钟前
【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)
数据结构·算法·leetcode·决策树·深度优先·剪枝
Jasmine_llq37 分钟前
《 火星人 》
算法·青少年编程·c#
闻缺陷则喜何志丹1 小时前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
Lenyiin1 小时前
01.02、判定是否互为字符重排
算法·leetcode
鸽鸽程序猿1 小时前
【算法】【优选算法】宽搜(BFS)中队列的使用
算法·宽度优先·队列
Jackey_Song_Odd1 小时前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
乐之者v2 小时前
leetCode43.字符串相乘
java·数据结构·算法
A懿轩A3 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组