根據身高重建佇列 腦筋急轉彎

2022-07-08 12:33:14 字數 2311 閱讀 3496

假設有打亂順序的一群人站成乙個佇列,陣列people表示佇列中一些人的屬性(不一定按順序)。每個people[i] = [hi, ki]表示第i個人的身高為hi,前面 正好 有ki個身高大於或等於hi的人。

示例 1:

輸入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]

輸出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]

解釋:編號為 0 的人身高為 5 ,沒有身高更高或者相同的人排在他前面。

編號為 1 的人身高為 7 ,沒有身高更高或者相同的人排在他前面。

編號為 2 的人身高為 5 ,有 2 個身高更高或者相同的人排在他前面,即編號為 0 和 1 的人。

編號為 3 的人身高為 6 ,有 1 個身高更高或者相同的人排在他前面,即編號為 1 的人。

編號為 4 的人身高為 4 ,有 4 個身高更高或者相同的人排在他前面,即編號為 0、1、2、3 的人。

編號為 5 的人身高為 7 ,有 1 個身高更高或者相同的人排在他前面,即編號為 1 的人。

因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新構造後的佇列。

public int reconstructqueue(int people)  else 

} });

int n = people.length;

int ans = new int[n];

for (int person : people)

}} }

return ans;

}

[5,0]0個身高更高或者相同的人排在他前面。[7,0]不能排在[5,0]前面,而[4,0]可以排在[5,0]前面。這裡由於沒有[4,0]且還沒有遍歷到[7,0],所以遍歷到[5,0]時可以把它放到位置0上。

[5,2]2個身高更高或者相同的人排在他前面,注意到身高相同的[5,0]排在它前面。

如果先遍歷[5,2],再遍歷[5,0],每次遍歷只需要考慮要在前面留多少個空位。

如果先遍歷[5,0],再遍歷[5,2],那麼每次遍歷先要判斷前後兩個人的身高是否相同,再考慮要在前面留多少個空位。

public int reconstructqueue(int people)  else 

} });

listans = new arraylist();

for (int person : people)

return ans.toarray(new int[ans.size()]);

}

這裡借助arraylistadd(int index, e element)方法,在指定位置插入指定元素,如果該位置上有元素,就將該位置上的元素及其後續的元素右移。

注意到[5,0][5,2]有相同的身高,且[5,0]只能排在[5,2]前面。如果先遍歷[5,2],再遍歷[5,0],那麼[5,2]會在[7,0][6,1]後面,接著[5,0]又跑到[7,0][6,1]前面,這樣會導致[5,2]3個身高更高或者相同的人排在他前面,這顯然是不對的,因此,這裡要先遍歷[5,0],再遍歷[5,2]

參考:

腦筋急轉彎

松下為什麼沒索尼強?答案 panasonic 怕了索尼哥 a和c誰比較高呢?答案 c比較高 因為abcd a比c低 茉莉花 太陽花 玫瑰花哪一朵花最沒力?答案 茉莉花 好一奪沒力 美麗 的茉莉花 猩猩最討厭什麼線?答案 平行線。平行線沒有相交 香蕉 布和紙怕什麼?答案 布怕一萬,紙怕萬一。不怕一萬,...

腦筋急轉彎

以下內容摘抄於網際網路上,只為輕鬆一下。乙個人的錢包掉了,他首先應怎麼辦?答案 撿起來 但他沒撿,為什麼?答案 因為他是比爾 蓋茨 乙隻公雞抓著剛下蛋的母雞痛打,為什麼?答案 因為那只母雞下了乙個鴨蛋 哪個數字最勤勞?哪個數字最懶?答案 一不做 二不休 蔣介石如果還在世的話世界會怎樣?答案 多乙個人...

腦筋急轉彎

1.乙個很胖的胖子從跳下去會變成什麼?死胖子 2.小白加小白是什麼?小白兔 two 3.餃子是公的還是母的?公的,因為有包皮 4.瞎子揹著聾子過河,過到一半,聾子對瞎子說,河裡有人洗澡,瞎子笑笑回答說,肯定是個女的,瞎子怎麼知道是女的?因為他感覺後腰有東西突然頂了他 5.一位媽媽搭計程車要去接國中的...