First Non-Adjacent Pair Sum
Submit solution
Points:
10
Time limit:
1.0s
Memory limit:
64M
Author:
Problem type
Allowed languages
Java 19, Java 8
題目說明
請撰寫一個程式,從一個整數陣列中尋找第一組符合條件的「數字配對」。
給定一個目標總和 k、陣列長度 n,以及包含 n 個整數的陣列(所有整數範圍皆在 [1, 20] 之間)。
符合條件的配對
所謂「符合條件的配對」,必須同時滿足以下兩點:
- 兩個數字相加的總和等於 k
- 這兩個數字在陣列中的位置 不可以相鄰
第一組配對的定義
假設配對的兩個數字在陣列中的索引(Index)分別為 i 與 j,且規定 i < j(索引從 0 開始)。
程式必須:
- 優先尋找最小的 i
- 若存在多組相同的最小 i,則尋找其中最小的 j
題目保證輸入資料中,一定存在至少一組符合條件的配對。
輸入值的格式
輸入共有三行:
- 第一行:一個正整數 k,代表目標總和
- 第二行:一個正整數 n,代表陣列長度
- 第三行:n 個以空白分隔的整數,代表陣列內容
輸出值的格式
輸出兩個整數,中間以一個空白隔開。
這兩個整數分別是找到的那組配對中的數值 A[i] 與 A[j](依照 i 在前、j 在後的順序輸出)。
輸出完畢後請換行。
各種需要注意的邊界條件
相鄰陷阱
即使兩個數字相加等於 k,如果它們在陣列中是緊鄰的(例如索引 0 和 1),則不符合資格,必須跳過繼續尋找。搜尋順序
必須嚴格遵守 i 由小到大、j 由小到大的順序,輸出的必須是邏輯上遇到的第一組。最小規模
由於要求不相鄰,陣列長度 n 至少為 3。重複數值
陣列中可能包含重複的數字,這不影響配對規則,只要索引位置符合條件即可。極端位置
配對可能出現在陣列的最開頭與最結尾(例如索引 0 和 n-1)。
sample input1
10
5
3 7 5 2 5sample output1
5 5說明
目標總和 k = 10
所有可能加總為 10 的組合中:
3 + 7 = 10,但索引為 0 與 1,相鄰,不符合條件
5 + 5 = 10,索引為 2 與 4,這兩個數字並不相鄰,因此符合條件。
因此輸出 5 5
sample input2
8
6
4 1 4 3 5 4sample output2
4 4說明
目標總和 k = 8
從最小索引開始搜尋:
索引 0 的 4 可與索引 2 的 4 相加為 8
索引 0 與 2 不相鄰,符合規則
雖然後面還有其他 4,但題目規定:
優先最小的 i
再選擇最小的 j
因此第一組合法配對為 4 4
Comments