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] 之間)。

符合條件的配對

所謂「符合條件的配對」,必須同時滿足以下兩點:

  1. 兩個數字相加的總和等於 k
  2. 這兩個數字在陣列中的位置 不可以相鄰

第一組配對的定義

假設配對的兩個數字在陣列中的索引(Index)分別為 i 與 j,且規定 i < j(索引從 0 開始)。

程式必須:

  • 優先尋找最小的 i
  • 若存在多組相同的最小 i,則尋找其中最小的 j

題目保證輸入資料中,一定存在至少一組符合條件的配對。


輸入值的格式

輸入共有三行:

  1. 第一行:一個正整數 k,代表目標總和
  2. 第二行:一個正整數 n,代表陣列長度
  3. 第三行: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 5

sample 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 4

sample output2

4 4

說明

目標總和 k = 8

從最小索引開始搜尋:

索引 0 的 4 可與索引 2 的 4 相加為 8

索引 0 與 2 不相鄰,符合規則

雖然後面還有其他 4,但題目規定:

優先最小的 i

再選擇最小的 j

因此第一組合法配對為 4 4


Comments

There are no comments at the moment.