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