lintcode入门篇八

397. 最长上升连续子序列

给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)

样例

样例 1:

输入:[5, 4, 2, 1, 3]
输出:4
解释:
给定 [5, 4, 2, 1, 3],其最长上升连续子序列(LICS)为 [5, 4, 2, 1],返回 4。

样例 2:

输入:[5, 1, 2, 3, 4]
输出:4
解释:
给定 [5, 1, 2, 3, 4],其最长上升连续子序列(LICS)为 [1, 2, 3, 4],返回 4。

挑战

使用 O(n) 时间和 O(1) 额外空间来解决

输入测试数据 (每行一个参数) 如何理解测试数据?
class Solution:
    '''
    1.按照升序的方式进行查找(逆序反一下即可,比较出两者较大的值即可)
    2.初始化longest为0,初始length为0
    3.如果是首个字符的话,则length为1(长度),或者是刚好下降趋势,此时length也是为1(如果一直处于下降趋势,则一直为1,否则length持续加1,计数)
    '''
    def longestIncreasingContinuousSubsequence(self,A):
        ##后面表示的是逆序,A[::-1]也可以
        return max(self.getlongestuplength(A),self.getlongestuplength(list(reversed(A))))

    def getlongestuplength(self,nums):
        longest = 0
        length = 0
        for i in range(len(nums)):
            ##如果为首位元素或者是当前元素<前一个元素的时候,length开始重置为1
            if i == 0 or nums[i] < nums[i-1]:
                length = 1
            else:
                ##开始计数,如果升序或者平序
                length += 1
            ##一直取出最大值出来,直到最后
            longest = max(length,longest)
        return longest

407. 加一

中文 English

给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。

该数字按照数位高低进行排列,最高位的数在列表的最前面。

样例

样例 1:

输入:[1,2,3]
输出:[1,2,4]

样例 2:

输入:[9,9,9]
输出:[1,0,0,0]
class Solution:
    def plusOne(self,digits):
        origin_num = 0
        for i in range(len(digits)):
            origin_num = origin_num + digits[::-1][i]*10**i 
        
        after_num = origin_num + 1
        res =[]
        while  after_num>0:#循环取出数字的每一位,例如124的1,2,4分别append到res,after_num//10为0则会跳出循环
            column = after_num%10##得到末位的数
            after_num = after_num//10##去掉末位,取整
            res.append(column)
        return res[::-1]
 
   

猜你喜欢

转载自www.cnblogs.com/yunxintryyoubest/p/12460121.html
今日推荐