瀏覽更多/最多的文章數(shù)

題目

某位用戶連續(xù)一周登錄簡書瀏覽文章,假設(shè)他一周瀏覽文章的天數(shù)為一個(gè)list,記錄為[5,10,2,4,5,3,15]。求解以下兩個(gè)問題:
(1)該用戶在登錄幾天后可以瀏覽比當(dāng)天數(shù)量更多的文章數(shù)
以第3天為例,他當(dāng)天瀏覽了2篇文章,在第4天瀏覽了4篇文章,那么此時(shí)的值應(yīng)該為1
答案應(yīng)該是:[1, 5, 1, 1, 2, 1, 0]
(2)該用戶在登錄幾天后可以瀏覽最多的文章數(shù)
以第3天為例,他當(dāng)天瀏覽了2篇文章,在第7天瀏覽了4篇文章,那么此時(shí)的值應(yīng)該為4
答案應(yīng)該是:[6, 5, 4, 3, 2, 1, 0]

解法

暴力求解

暴力是求解一切算法最好用的方法,這道題暴力求解很容易,直接兩層循環(huán)解決


#題目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])

棧求解

棧求解的好處是只用遍歷一遍
關(guān)于題目1:因?yàn)槭乔蠼庀乱粋€(gè)更長時(shí)間,所以預(yù)先需要設(shè)置一個(gè)棧存儲(chǔ)之后元素,然后通過while不斷彈出,而彈出的位置應(yīng)該從頭開始
關(guān)于題目2:因?yàn)榍蠼庾铋L的時(shí)間,因此需要不斷的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])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容