題目連結:
題目意譯:
給定一正整數 n,找到樞紐(pivot)整數 x 使得:
所有位於 1(含)到 x(含)之間的整數之總和等於所有位於 x(含)到 n(含)之間的整數之總和。
回傳樞紐整數 x。如果不存在這樣子的整數,則回傳 -1。保證在給定的輸入中最多只存在一個樞紐整數。
限制:
1 ≦ n ≦ 1000
範例測資:
範例 1:
輸入: n = 8
輸出: 6
解釋: 6 為樞紐整數,因為 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21。
範例 2:
輸入: n = 1
輸出: 1
解釋: 1 為樞紐整數,1 = 1。
範例 3:
輸入: n = 4
輸出: -1
解釋: 可以證明不存在樞紐整數。
解題思維:
可以看到如果存在這樣樞紐整數 x,則代表下列等式成真:
1 + 2 + …… + x = x + (x + 1) + …… + n
利用等差公式並化簡一下可以得到
2x ^ 2 = n ^ 2 + n
因此 x 之值為
sqrt(n × (n + 1) ÷ 2)
其中 sqrt(y) 代表取 y 之平方根。
可以看到這個數值必定存在但是不是整數不好說。而我們只要檢查 n × (n + 1) ÷ 2 是否為一個完全平方數(即某數的平方)即可。如果是則上式即為所求;反之,則代表樞紐整數不存在,因此回傳 -1。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。