亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

堆棧和隊列亞馬遜面試問題

堆棧和隊列亞馬遜面試問題

慕神8447489 2023-12-26 14:53:21
描述給定一個包含 n 個整數的數組 A。您必須創建一個給定整數的隊列和堆棧。隊列應僅包含素數,堆棧應僅包含合數。數組中的所有數字都是 。形成堆棧和隊列的規則是您應該能夠使用彈出和出隊操作生成數組。注:請仔細閱讀本說明假設數組 A 包含 5 個整數: 7 , 21 , 18 , 3 , 12 ,那么隊列和堆棧的內容將為: 隊列 : 7 , 3 堆棧 : 12 , 18 , 21 現在,如果您遵循堆棧和隊列的規則,那么您會發現可以使用堆棧的彈出操作和隊列的出列操作來生成數組,如下所示:dequeue from queue : 7pop from stack : 7 , 21pop from stack : 7 , 21 , 18dequeue from queue : 7 , 21 , 18 , 3pop from stack : 7 , 21 , 18 , 3 , 12因此,對于每個數組 A,您必須在第一行中打印隊列的內容,在第二行中打印堆棧的內容。輸入格式 第一行包含一個整數 n 作為輸入,表示數組中整數的總數。下一行包含 n 個空格分隔的整數,表示數組 A 的元素。您的輸出應打印兩個 array ,每行一個。第一行應該是隊列的內容,第二行應該是堆棧的內容。輸出格式 第一行打印隊列的內容,第二行打印堆棧的內容。樣本輸入57 21 18 3 12樣本輸出7 3 12 18 21 我的代碼backwas = input()num1 = list(map(int, input().split()))dic = {}for num in num1:    output = []    for i in range(2,num+1):        if num%i == 0:            output.append(i)        for item in set(output):            output1 = list(set(output))            dic[num] = output1prime = []comp = []for num in num1:    list1 = []    list1 = list(dic[num])    if len(list1) != 1:        comp.append(str(num))    else:        prime.append(str(num))   print(" ".join(prime))print(" ".join(comp))我的代碼有問題如果你讀得正確,你會立即注意到這個問題的困難部分是以正確的順序創建兩個列表,也就是說,當對它們進行一些操作時,它們會返回原始列表。我的代碼無法做到這一點。我應該如何解決這個問題?
查看完整描述

2 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

問題的要點要求給定一系列空格分隔的整數,將列表分為存儲在隊列中的素數和存儲在堆棧中的復合整數。按 FIFO 順序輸出隊列中的素數,并按 LIFO 順序輸出堆棧中的復合整數。

隊列是線性先進先出 (FIFO) 數據結構。如果我們使用append()來實現enqueue(),使用pop()來實現dequeue(),那么List數據結構就可以用作隊列。然而,列表為此目的非常慢,因為在開頭插入或刪除元素需要 O(n) 時間。使用集合 mnodule 中的出隊類是首選隊列實現機制,因為追加和彈出操作需要 O(1) 時間。

堆棧是線性后進/先出 (LIFO) 或先入/后出 (FILO) 數據結構。與隊列類似,列表數據結構可以用來實現堆棧,但是與隊列情況一樣,如果列表很長,就會出現性能問題。因此,出隊類是實現堆棧的首選。

根據指令,第一行輸入給出第二行輸入中的整數個數。
第二行由空格分隔的整數組成。輸出由兩行組成。

  • 第一個輸出行應按照輸入的順序顯示輸入中的素數。

  • 第二行應以與輸入相反的順序顯示輸入中的合數。

這是我解決問題的方法:

#Utility to detect a Prime

def is_prime(n: int) -> bool:

    """

     Integer -> Boolean

     returns True if n is a prime number

    """

    if n == 2 or n == 3: return True

    if n < 2 or n%2 == 0: return False

    if n < 9: return True

    if n%3 == 0: return False

    r = int(sqrt(n))

    f = 5

    while f <= r:

        if n%f == 0:

            return False

        if n%(f+2) == 0:

            return False

        f +=6

    return True

使用列表方法


# Implementation with Lists assuming instr is list of integers

def list_method(instr: str):

    qlist = []

    stklist = []

    inLst = list(map(lambda x:int(x) ,instr.split()))

    for n in inLst:

        if is_prime(n):

            qlist.append(n)

        else:

            stklist.append(n)

    print(" ".join(map(lambda x: str(x), qlist)))

    print(" ".join(map(lambda x: str(x), stklist[::-1])))

使用出隊類


from collections import deque

def queue_method(instr: str):

    q = deque()

    stk = deque()

    inLst = list(map(lambda x:int(x) ,instr.split()))

    for n in inLst:

        if is_prime(n):

            q.append(n)

        else:

            stk.append(n)

    print(" ".join([str(q.popleft()) for i in range(len(q))]))

    print(" ".join([str(stk.pop()) for i in range(len(stk))]))


查看完整回答
反對 回復 2023-12-26
?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

這是使用埃拉托斯特尼篩法和 2 個數組的簡單方法。


num1 = [7,21,18,3,12]    # your list

n = max(num1)

prime = [True for i in range(n+1)] 

p = 2

while (p * p <= n):  #creating a Sieve using standard operations

    if (prime[p] == True): 

        for i in range(p * p, n+1, p): 

            prime[i] = False

    p += 1


prim, comp = [], []

for i in num1:

    if prime[i]:

        prim.append(i)

    else:

        comp.append(i)

for i in prim:

    print(i, end = " ")

print()

for i in comp[::-1]:

    print(i, end = " ")

print()


查看完整回答
反對 回復 2023-12-26
  • 2 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號