LeetCode #1042 Flower Planting With No Adjacent 不鄰接植花

1042 Flower Planting With No Adjacent 不鄰接植花

Description:
You have N gardens, labelled 1 to N. In each garden, you want to plant one of 4 types of flowers.

paths[i] = [x, y] describes the existence of a bidirectional path from garden x to garden y.

Also, there is no garden that has more than 3 paths coming into or leaving it.

Your task is to choose a flower type for each garden such that, for any two gardens connected by a path, they have different types of flowers.

Return any such a choice as an array answer, where answer[i] is the type of flower planted in the (i+1)-th garden. The flower types are denoted 1, 2, 3, or 4. It is guaranteed an answer exists.

Example:

Example 1:

Input: N = 3, paths = [[1,2],[2,3],[3,1]]
Output: [1,2,3]

Example 2:

Input: N = 4, paths = [[1,2],[3,4]]
Output: [1,2,1,2]

Example 3:

Input: N = 4, paths = [[1,2],[2,3],[3,4],[4,1],[1,3],[2,4]]
Output: [1,2,3,4]

Note:

1 <= N <= 10000
0 <= paths.size <= 20000
No garden has 4 or more paths coming into or leaving it.
It is guaranteed an answer exists.

題目描述:
有 N 個(gè)花園煌寇,按從 1 到 N 標(biāo)記。在每個(gè)花園中固逗,你打算種下四種花之一虐骑。

paths[i] = [x, y] 描述了花園 x 到花園 y 的雙向路徑坏挠。

另外师骗,沒(méi)有花園有 3 條以上的路徑可以進(jìn)入或者離開(kāi)屁擅。

你需要為每個(gè)花園選擇一種花仲义,使得通過(guò)路徑相連的任何兩個(gè)花園中的花的種類互不相同。

以數(shù)組形式返回選擇的方案作為答案 answer杠巡,其中 answer[i] 為在第 (i+1) 個(gè)花園中種植的花的種類量窘。花的種類用 1, 2, 3, 4 表示氢拥。保證存在答案蚌铜。

示例 :

示例 1:

輸入:N = 3, paths = [[1,2],[2,3],[3,1]]
輸出:[1,2,3]
示例 2:

輸入:N = 4, paths = [[1,2],[3,4]]
輸出:[1,2,1,2]
示例 3:

輸入:N = 4, paths = [[1,2],[2,3],[3,4],[4,1],[1,3],[2,4]]
輸出:[1,2,3,4]

提示:

1 <= N <= 10000
0 <= paths.size <= 20000
不存在花園有 4 條或者更多路徑可以進(jìn)入或離開(kāi)。
保證存在答案嫩海。

思路:

貪心法涂色, 題目保證了每個(gè)結(jié)點(diǎn)最多只有 3個(gè)出度(入度)
遍歷 paths數(shù)組, 將比自己小的結(jié)點(diǎn)存入表格中, 然后遍歷 N個(gè)結(jié)點(diǎn), 找到最小的未使用過(guò)的顏色加入結(jié)果
時(shí)間復(fù)雜度O(n), 空間復(fù)雜度O(n)

代碼:
C++:

class Solution 
{
public:
    vector<int> gardenNoAdj(int N, vector<vector<int>>& paths) 
    {
        vector<int> result(N, 1);
        vector<vector<int>> record(N);
        for (auto path : paths) record[max(path[0], path[1]) - 1].push_back(min(path[0], path[1]) - 1);
        for (int i = 1; i < N; ++i) 
        {
            int used[5]{0}; 
            for (auto j : record[i]) used[result[j]] = 1;
            for (int j = 4; j > 0; --j) if (!used[j]) result[i] = j;
        }
        return result;
    }
};

Java:

class Solution {
    public int[] gardenNoAdj(int N, int[][] paths) {
        int result[] = new int[N];
        Map<Integer, Set<Integer>> record = new HashMap<>(N);
        for (int i = 0; i < N; i++) record.put(i, new HashSet<>());
        for (int[] path : paths) record.get(Math.max(path[0], path[1]) - 1).add(Math.min(path[0], path[1]) - 1);
        for (int i = 0; i < N; ++i) {
            int used[] = new int[5]; 
            for (int j : record.get(i)) used[result[j]] = 1;
            for (int j = 4; j > 0; --j) if (used[j] == 0) result[i] = j;
        }
        return result;
    }
}

Python:

class Solution:
    def gardenNoAdj(self, N: int, paths: List[List[int]]) -> List[int]:
        result, record = [1] * N, [set() for _ in range(N)]
        for path in paths:
            record[max(path[0], path[1]) - 1].add(min(path[0], path[1]) - 1)
        for i in range(1, N):
            result[i] = ({1, 2, 3, 4} - {result[j] for j in record[i]}).pop()
        return result
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冬殃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子出革,更是在濱河造成了極大的恐慌造壮,老刑警劉巖渡讼,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骂束,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡成箫,警方通過(guò)查閱死者的電腦和手機(jī)展箱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蹬昌,“玉大人混驰,你說(shuō)我怎么就攤上這事。” “怎么了栖榨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵昆汹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我婴栽,道長(zhǎng)满粗,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任愚争,我火速辦了婚禮映皆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轰枝。我一直安慰自己捅彻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布鞍陨。 她就那樣靜靜地躺著步淹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诚撵。 梳的紋絲不亂的頭發(fā)上贤旷,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音砾脑,去河邊找鬼幼驶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛韧衣,可吹牛的內(nèi)容都是我干的盅藻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼畅铭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼氏淑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起硕噩,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤假残,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后炉擅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辉懒,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年谍失,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眶俩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡快鱼,死狀恐怖颠印,靈堂內(nèi)的尸體忽然破棺而出纲岭,到底是詐尸還是另有隱情,我是刑警寧澤线罕,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布止潮,位于F島的核電站,受9級(jí)特大地震影響钞楼,放射性物質(zhì)發(fā)生泄漏沽翔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一窿凤、第九天 我趴在偏房一處隱蔽的房頂上張望仅偎。 院中可真熱鬧,春花似錦雳殊、人聲如沸橘沥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)座咆。三九已至,卻和暖如春仓洼,著一層夾襖步出監(jiān)牢的瞬間介陶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工色建, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哺呜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓箕戳,卻偏偏與公主長(zhǎng)得像某残,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陵吸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容