0124leetcode刷题5道python

674

题目描述:
给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。

示例:
在这里插入图片描述
解答:

class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        if len(nums)<=1:
            return len(nums)
        res=1
        temp=1
        for i in range(1,len(nums)):
            if nums[i]>nums[i-1]:
                temp+=1
            else:
                res=max(temp,res)
                temp=1
        return max(temp,res)


剑指offer09

题目描述:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例:
在这里插入图片描述
解答:

class CQueue:

    def __init__(self):
        self.stackin=[]
        self.stackout=[]


    def appendTail(self, value: int) -> None:
        self.stackin.append(value)


    def deleteHead(self) -> int:
        if self.stackout:
            return self.stackout.pop()
        elif not self.stackin:
            return -1
        else:
            while self.stackin:
                self.stackout.append(self.stackin.pop())
            return self.stackout.pop()



# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()

剑指offer50

题目描述:
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

示例:
在这里插入图片描述
解答:

class Solution:
    def firstUniqChar(self, s: str) -> str:
        if s==" ":
            return  " "
        for i in range(0,len(s)):
            if s.count(s[i])==1:
                return s[i]
        return " "

面试题02.01

题目描述:
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

示例:
在这里插入图片描述
解答:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def removeDuplicateNodes(self, head: ListNode) -> ListNode:
        '''
        利用set储存已有的节点值,遇到重复的就使得前一个节点的next指向next.next
        '''
        val_set=set()
        prev=ListNode(-1)
        prev.next=head

        while prev.next:
            if prev.next.val in val_set:
                prev.next=prev.next.next
            else:
                val_set.add(prev.next.val)
                prev=prev.next
            
        return head

面试题16.10

题目描述:
给定 N 个人的出生年份和死亡年份,第 i 个人的出生年份为 birth[i],死亡年份为 death[i],实现一个方法以计算生存人数最多的年份。
你可以假设所有人都出生于 1900 年至 2000 年(含 1900 和 2000 )之间。如果一个人在某一年的任意时期处于生存状态,那么他应该被纳入那一年的统计中。例如,生于 1908 年、死于 1909 年的人应当被列入 1908 年和 1909 年的计数。
如果有多个年份生存人数相同且均为最大值,输出其中最小的年份。

示例:
在这里插入图片描述
解答:

class Solution:
    def maxAliveYear(self, birth: List[int], death: List[int]) -> int:
        left=min(birth)
        right=max(death)
        n= len(birth)
        sum=0
        res1=0
        res2=birth[0]
        for i in range(left,right+1):
            for j in range(n):
                if birth[j]<=i<=death[j]:
                    sum+=1
            if res1<sum:
                res1=sum
                res2=i
            sum=0
        return res2

猜你喜欢

转载自blog.csdn.net/yeqing1997/article/details/113032556