25号LeetCode复盘

 

#缺失的第一个正数

相对比较简单,但是难度是困难。。

先对特殊数据进行判断,

一.空集,空集的话 缺失的第一个正整数就是1,so return 1

二.最小的数字大于1,同样的返回1

如果不是上面两种情况,则对数组进行遍历

判断是否存在nums[i]<0,nums[i+1]>1。若存在这种情况,则nums[i]为负数,而nums[i+1]为大于1的正整数,可得出缺失的最小的正整数为1

判断是否存在nums[i]>=0,nums[i+1]>nums[i]+1。若存在这种情况,则nums[i]与nums[i+1]都大于0,且nums[i]与nums[i+1]不是连续的正整数,可得出

缺失的最小正整数为nums[i]+1

若不存在上述情况,则证明数组元素为连续的正整数,答案即为最大元素值加一

class Solution(object):
    def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if nums == [] :
            return 1
        nums.sort()
        if nums[0]>0 and nums[0] != 1:
            return 1
        for i in range(len(nums)-1):
            if nums[i]<0 and nums[i+1]> 1:
                return 1
            elif nums[i]>=0 and nums[i+1]>nums[i]+1:
                return nums[i]+1
        return nums[-1]+1

这种算法比较初级,提交之后看了另外一个大佬的代码,思路很清奇

设一个初始值res=0

当数组元素nums[i]=res,res+=1

最后就返回res,是不是很厉害。手动笑哭

res = 0
for i in nums:
    if i == res :
        res += 1

# 转置矩阵

这个也算是比较easy的困难题了

同样的先判断特殊例,空列表,如果是的话直接返回''就好

然后新建一个列表A

两个循环嵌套,外层循环是len(A[0])次,决定新数组的子列表个数,内层循环是len(A),决定新列表里每个子列表由几个元素组成

再创建一个新列表B,储存每个子列表的元素

当内层循环完一次之后将列表B添加到列表A中即可

class Solution(object):
    def transpose(self, A):
        """
        :type A: List[List[int]]
        :rtype: List[List[int]]
        """
        if A == False :
            return ''
        new_A = []
        for j in range(len(A[0])):
            new_list = []
            for i in range(len(A)):
                new_list.append(A[i][j])
            new_A.append(new_list)
        return new_A