• 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))
  • 相关阅读:
    “二柱子四则运算”终结版
    “睡眠猴子”团队项目及成员介绍
    最大联通子数组的和
    构建之法阅读笔记04
    构建之法阅读笔记03
    “进度条”博客——第五周
    构建之法阅读笔记02
    构建之法阅读笔记01
    “进度条”博客——第四周
    课后实验6--二维数组最大联通子数组的和
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12460121.html
Copyright © 2020-2023  润新知