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]

408. 二进制求和

中文English

给定两个二进制字符串,返回他们的和(用二进制表示)。

样例

样例 1:

输入:
a = "0", b = "0"
输出:
"0"

样例 2:

输入:
a = "11", b = "1"
输出:
"100"
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    '''
    大致思路:
    1.二进制转十进制,相加
    2.十进制转二进制返回
    '''
    def addBinary(self,a,b):
        return bin(int(a,2) + int(b,2))[2:]

讲解(进制之间的转换):

1.转十进制:
二进制转十进制:
int('0b1111',2)

十六进制转十进制
int('',16)

八进制转十进制
int('',8)

2.转二进制:
十进制转二进制:
bin(10)

十六进制转二进制
bin('',16)

八进制转二进制
bin('',8)

3.转八进制
二进制转八进制
oct('ob111')

十进制转八进制
oct(11)

十六进制转八进制
oct(oxf)

4.转十六进制
二进制转十六进制(显示二进制转为十进制,在转十六进制)
hex(int(10,2))

十进制转十六进制
hex(10)

八进制转十六进制(先是八进制转十进制,然后在转为十六进制)
hex(int(10,8))
posted @ 2020-03-11 02:29  风不再来  阅读(178)  评论(0编辑  收藏  举报