美文网首页
浏览更多/最多的文章数

浏览更多/最多的文章数

作者: 不分享的知识毫无意义 | 来源:发表于2021-02-15 17:46 被阅读0次

    题目

    某位用户连续一周登录简书浏览文章,假设他一周浏览文章的天数为一个list,记录为[5,10,2,4,5,3,15]。求解以下两个问题:
    (1)该用户在登录几天后可以浏览比当天数量更多的文章数
    以第3天为例,他当天浏览了2篇文章,在第4天浏览了4篇文章,那么此时的值应该为1
    答案应该是:[1, 5, 1, 1, 2, 1, 0]
    (2)该用户在登录几天后可以浏览最多的文章数
    以第3天为例,他当天浏览了2篇文章,在第7天浏览了4篇文章,那么此时的值应该为4
    答案应该是:[6, 5, 4, 3, 2, 1, 0]
    

    解法

    暴力求解

    暴力是求解一切算法最好用的方法,这道题暴力求解很容易,直接两层循环解决

    
    #题目1
    def nextGreaterElements(nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        nums_length = len(nums)
        res_list = [0 for _ in range(nums_length)]
        res_index = [0 for _ in range(nums_length)]
        for i in range(nums_length):
            for j in range(i+1,nums_length):
                if nums[i] < nums[j]:
                    res_list[i] = nums[j]
                    res_index[i] = j-i
                    break
        return res_list,res_index
    print(nextGreaterElements([5,10,2,4,5,3,15])[1])
    
    #题目2
    def nextGreaterElements(nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        nums_length = len(nums)
        res_list = [0 for _ in range(nums_length)]
        res_index = [0 for _ in range(nums_length)]
        for i in range(nums_length):
            for j in range(i+1,nums_length):
                if nums[i] < nums[j]:
                    res_list[i] = nums[j]
                    res_index[i] = j - i
        return res_list,res_index
    print(nextGreaterElements([5,10,2,4,5,3,15])[1])
    

    栈求解

    栈求解的好处是只用遍历一遍
    关于题目1:因为是求解下一个更长时间,所以预先需要设置一个栈存储之后元素,然后通过while不断弹出,而弹出的位置应该从头开始
    关于题目2:因为求解最长的时间,因此需要不断的append最大值

    #题目1
    def nextGreaterElements(nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        nums_length = len(nums)
        res_list = [0 for _ in range(nums_length)]
        res_index = [0 for _ in range(nums_length)]
        for i in range(nums_length):
            print(i)
            stack = list(range(i+1,nums_length))
            print(stack)
            while stack and nums[i]>nums[stack[0]]:
                stack.pop(0)
            res_list[i] = nums[stack[0]] if stack else 0
            res_index[i] = stack[0]-i if stack else 0
        return res_list,res_index
    print(nextGreaterElements([5,10,2,4,5,3,15])[1])
    
    #题目2
    def nextGreaterElements(nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        nums_length = len(nums)
        res_list = [0 for _ in range(nums_length)]
        res_index = [0 for _ in range(nums_length)]
        for i in range(nums_length-2,-1,-1):
            stack = list(range(i+1,nums_length))
            print(i)
            while (nums[i]>nums[stack[-1]]):
                stack.append(i)
            print(stack)
            res_list[i] = nums[stack[-1]]
            res_index[i] = stack[-1]-i
        return res_list,res_index
    print(nextGreaterElements([5,10,2,4,5,3,15])[1])
    

    相关文章

      网友评论

          本文标题:浏览更多/最多的文章数

          本文链接:https://www.haomeiwen.com/subject/zvnpxltx.html