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