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
'''