首页 > 其他分享 >leetcode day01

leetcode day01

时间:2024-02-20 18:13:42浏览次数:29  
标签:p1 ListNode int day01 else return next leetcode

链表类:


#88. 合并两个有序数组  //
class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        p1, p2, p = m - 1, n - 1, m + n - 1
        while p2 >= 0:  # nums2 还有要合并的元素
            # 如果 p1 < 0,那么走 else 分支,把 nums2 合并到 nums1 中
            if p1 >= 0 and nums1[p1] > nums2[p2]:
                nums1[p] = nums1[p1]  # 填入 nums1[p1]
                p1 -= 1
            else:
                nums1[p] = nums2[p2]  # 填入 nums2[p1]
                p2 -= 1
            p -= 1  # 下一个要填入的位置


#160 相交链表  //双指针
class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:
        A,B=headA,headB
        while A!=B:
            A=A.next if A else headB
            B=B.next if B else headA
        return A


# 头插法
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        newhead= ListNode()  #这里应该实例化一个头节点,不然会陷入死循环 
        while head:
            next=head.next
            head.next=newhead.next
            newhead.next=head
            head=next
        return newhead.next

# 合并列表 //递归
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if not l1: return l2  # 终止条件,直到两个链表都空
        if not l2: return l1
        if l1.val <= l2.val:  # 递归调用
            l1.next = self.mergeTwoLists(l1.next,l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1,l2.next)
            return l2

#27 移除元素  //快慢指针
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        slow=0
        fast=0
        while fast<len(nums):
            if nums[fast]!=val:
                nums[slow]=nums[fast]
                slow+=1
            fast+=1
        return slow

#83 删除重复元素 



#80. 删除有序数组中的重复项 II



#88. 合并两个有序数组



#26 删除有序数组重复项
#即定义两个指针left和right,right从左到右把所有元素扫一遍,将不重复的元素赋给left的下一位

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        left=0
        right=1
        n=len(nums)
        if n<=1:
            return n
        while right<len(nums):
            if nums[right]==nums[right-1]:
                right+=1
            else:
                nums[left+1]=nums[right]
                left+=1
                right+=1
        return left+1

#169 众数
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        votes,count=0,0
        for num in nums:
            if votes==0:
                x=num
            votes+=1 if num==x else -1
        return x


#括号有效性
class Solution:
    def isValid(self, s: str) -> bool:
        dic = {')':'(',']':'[','}':'{'}
        stack = []
        for i in s:
            if stack and i in dic:
                if stack[-1] == dic[i]: stack.pop()
                else: return False
            else: stack.append(i)
        return not stack


#回文数
class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x<0:
            return False
        cur=0
        num=x
        while(num!=0):
            cur=cur*10+num%10
            num=int(num/10)
        return cur==x

#回文字符 上不得一点台面
        ret = []
        for i in s:
            if i.isalnum():
                ret.append(i.lower())
        return ret == ret[::-1]

#35 二分法 找插入位置
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        left,right=0,len(nums)
        while left<right:
            mid=left+((right-left)>>1)
            if nums[mid]==target:
                return mid
            elif nums[mid]>target:
                right=mid
            else:
                left=mid+1
        return right


def isvalid(s):
    res = []
    dic = {'(':')','[':']','{':'}'}
    for i in s:
        if i in dic:
            res += i
        elif res and i==dic[res[-1]]:
            res.pop()
        else:
            return False
    return True

标签:p1,ListNode,int,day01,else,return,next,leetcode
From: https://www.cnblogs.com/mosquito9/p/18023729

相关文章

  • Leetcode刷题第十天-动态规划
    ......
  • day01
    day01目录day01渐进式Vue的两种开发方式:框架创建Vue实例插值表达式{作用:利用表达式进行插值,渲染到页面中语法注意响应式特性访问和修改data中的数据Vue中的常用指令内容渲染指令条件渲染指令事件绑定指令属性绑定指令列表渲染指令v-for中的key双向绑定指令关于v-model......
  • Leetcode 21-25题
    合并两个有序链表将两个升序链表合并为一个新的升序链表。用两个指针指向两个链表的表头,然后每次比较一下哪个值小,将较小的节点接到答案后面即可。ListNode*mergeTwoLists(ListNode*list1,ListNode*list2){autodummy=newListNode(),p=dummy;autol1=......
  • 爬虫——day01
    爬虫介绍爬虫是什么? -通过编程技术---》把互联网中的数据---》获取到---》数据清洗---》存到库中python:request,selenium---》app,小程序,网站---》xpaht,lxml---》mysql,redis,文件,excel,mongodb-通过编程语言---》模拟发送http请求---》获取数据---》解析--》入库......
  • Leetcode 16-20题
    最接近的三数之和给定整数数组和目标值target,从数组中选出三个整数,使得和与target最接近,并返回三数之和。保证恰好存在一个解。和上一题类似,我们先对整数数组排序,然后固定i,枚举j,找到满足nums[i]+nums[j]+nums[k]>=target的最小的k。那么显然有nums[i]+nums[j]+nums[k-1]<targ......
  • Leetcode 11-15题
    盛最多雨水的容器数组的第\(i\)个数字表示这个位置隔板的高度,选择哪两块板子可以装最多的水,返回可以存储的最大水量。有一种双指针的贪心策略:如果左边的指针所在的挡板低,就将左边的指针右移,否则将右边的指针左移。每次移动完之后,计算当前能存储的水量,并和结果值相比较。证明......
  • 滑动窗口 leetcode 76
    Problem:76.最小覆盖子串目录思路解题方法复杂度Code思路第一次遇到不看题解我是写不出来,主要是ans是不断变化的解题方法用两个指针,left缩小区间,right扩大区间,直到产生冗余元素开始,缩减left,直到不能再缩减为止,取满足的最小字串就好了复杂度时间复杂度:\(O(n)\)空......
  • leetcode--11. 盛最多水的容器(双指针)
    记录19:462024-2-15https://leetcode.cn/problems/container-with-most-water/利用双指针来解,一个在头,一个在尾,每次最小的那个进行移动,然后计算出容积。ps:刚开始想到了用单调栈来解决,但这道题和单调栈那个例题还不一样。然后暴力解当然超时了,然后学习到了双指针(..双指针应......
  • Leetcode 1-5题
    两数之和给定一个整数数组和一个目标值,在数组中找出和为目标值的两个整数,并返回其数组下标。题目确保必存在一个答案,且数组中无重复元素。数组长度为\([2,10^4]\)可以采用哈希表来存储每个值以及其出现的下标,那么对于nums[i]只需要查询在数组中是否出现过target-nums[i]即可......
  • leetcode 49 字母异位词分组
      需要好好研究各种写法。C++解法classSolution{public:vector<vector<string>>groupAnagrams(vector<string>&strs){vector<vector<string>>result;if(strs.size()==0)returnresult;unordered_map<......