貢獻者: 鮪魚-maguro
interviewer: 問
interviewee: 答
問:
挑選出這串石頭裡面最重的兩顆
讓兩顆石頭去互相的撞擊
如果這兩顆石頭重量一樣的話
那兩顆石頭都會消失
不是的話大的會留下來小的會消失
一路進行下去直到最後只剩下一顆或者是沒有石頭為止
答:
maximum他就是負責去找出這個array裡面最大跟第二大的
所以我的參數要給他我這個array
那因為是c語言
所以同時也要給它這個array這size
然後我這邊定了兩個變數
這邊跟正常的想法比較不一樣的是
它其實代表的不是最大值的那個值
而是它會在這個array的第幾個位置
我會從最開頭一路找找到這個正列的最結束
那一旦發現有人比IMAX還要大那這個時候他就會去取代IMAX
根據c語言的特性
array帶進來之後裡面的值做的變動
他的參數也是會跟著改變的
最開始的這個數時值陣列stones它的
裡面的數值會會有越來越多的0
那一旦最後剩只剩下一個數值
其他都是0或全部都是0的時候
這個就是我們的終點
問:
好你說用C++ 寫的方式會比較快
那能不能請你一樣
的題目用C++的方式再寫一次呢
答:
主要原因是因為他用的是C++能使用到的一些
function功能會比c來得多
那這邊想要用到priority queue
它的top就會是裡面的最大值
把它拿掉之後
這時候就可以找出第二大的紙
大的最大值跟第二大的值他們會相撞得到一個新的值
有可能是0那也有可能是有實際的值
那不管怎麼樣我們都可以把它加進去
直接做push就好了
然後就會一路去做兩顆石頭的相撞
那我們這邊是砍掉兩個加了一個
所以他的size會越來越小
我必須確保說這個priority queue裡面是還有東西的
當他等於一剩下最後一個的時候
或者是說等於0的時候
他就會離開這個迴圈
問:
c以及C++兩個回答的方式
出來的結果
可以請你分析這兩個結果
有什麼差異
答:
時間複雜度會是一樣的
它的時間複雜就是一個單純的常數
空間複雜度的話
在C++ 這邊我們額外新增一個priority queue
所以這邊的空間複雜度會大一點
不過它的差異也都是只有常數的差異而已
所以這兩個做法我覺得在這個地方是C++略勝一籌
問:
陣列代表著每一位運動員他在這項競技所獲得的分數
那請你回傳他的結果
分別是所有運動員裡面的第幾名
答:
題目既要我們把每位運動員的名次給決定出來
同時又要求說必須要保留原本運動員的順序
這邊用priority queue去做
那其實c的二維陣列也可以做
我這邊做的做法是
就單純沒有按照大小去存
但是我在取的時候有照大小去取
因為priority queue在取的時候
我們就可以很輕易的用top的函式去呼叫它的最大