0121leetcode刷题5道python

215

题目描述:
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

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

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        nums.sort()
        return nums[len(nums)-k]

628

题目描述:
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例:
解答:

class Solution:
    def maximumProduct(self, nums: List[int]) -> int:
        '''
        排序之后最大乘积就两种情况:
        1、如果全是正数就是最后三个数相乘 
        2、如果有负数最大的乘机要么是最后三个数相乘,要么是两个最小的负数相乘再乘以最大的正数
        '''
        nums.sort()
        return max(nums[-1]*nums[-2]*nums[-3],nums[0]*nums[1]*nums[-1])

面试题01.09

题目描述:
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。

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

class Solution:
    def isFlipedString(self, s1: str, s2: str) -> bool:
        if not s1 and not s2:
            return True
        if len(s1)!=len(s2):
            return False
        for i in range(len(s1)):
            if s1[i]==s2[0]:
                if s1[i:]+s1[:i]==s2:
                    return True
        return False

面试题02.02

题目描述:
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

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

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

class Solution:
    def kthToLast(self, head: ListNode, k: int) -> int:
        '''
        采用快慢指针
        快指针先走k步,然后慢指针再出发。
        快指针走到链表表尾,慢指针在倒数第k个节点。
        返回此时节点的值为所求
        '''
        fast=head
        slow=head
        while k>0:
            fast=fast.next
            k-=1
        while fast!=None:
            fast=fast.next
            slow=slow.next
        return slow.val

面试题02.06

题目描述:
编写一个函数,检查输入的链表是否是回文的。

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

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        '''
        先将链表的值取出
        再判断其是否回文
        '''
        nums=[]
        while head:
            nums.append(head.val)
            head=head.next
        return nums==nums[::-1]
        

        '''
        #快慢指针找到链表中点,快指针走两步,慢指针走一步
        if not head or not head.next:
            return True
        slow,fast=head,head
        while fast and fast.next:
            slow=slow.next
            fast=fast.next.next

        #后半部分反转
        dummy=ListNode(-1)
        while slow:
            tmp=slow.next
            slow.next=dummy.next
            dummy.next=slow
            slow=tmp
        
        #判断前半部分和后半部分是否相等
        p=dummy.next
        while p and head and p.val==head.val:
            p=p.next
            head=head.next
        return not p
        '''

猜你喜欢

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