陣列元素最小差值 C 實現

2021-10-05 02:56:54 字數 1209 閱讀 3442

問題描述:給定n個數,請找出其中相差(差的絕對值)最小的兩個數,輸出它們的差值的絕對值。

輸入格式:輸入第一行包含乙個整數n。第二行包含n個正整數,相鄰整數之間使 用乙個空格分隔。

輸出格式:輸出乙個整數,表示答案。

輸入:5

1 5 4 8 20

輸出:1

輸入:5 9 3 6 1 3輸出0

資料規模和約定:對於所有評測用例,2 ≤ n ≤ 1000,每個給定的整數都是不超過10000的正整數。

直接能夠想到的是用algorithm庫中的sort函式進行排序後,最小兩個元素之間的差值即為答案,演算法複雜度o(nlog2n)

#include

#include

using

namespace std;

intmain()

;int n;

cin >> n;

for(

int i =

0; i < n;

++i)

sort

(a, a + n)

; cout << a[1]

- a[0]

<< endl;

return0;

}

以下分享以下自己想到的另外一種方法,通過三個整形變數,分別記錄最小差值,以及陣列中的元素。應該是種動態規劃,不知道是不是,改進之後演算法時間複雜度為o(n)

#include

#include

using

namespace std;

//陣列中元素最小差

void

fun(

int a,

int n)

int num1=a[1]

;//初始標記陣列第二位

int num2=a[0]

;//初始標記陣列第一位

int sum =

abs(num1-num2)

;//記錄差

for(

int i =

2; i < n;i++)}

} cout << sum << endl;

}int

main()

;fun

(a,sizeof

(a)/

sizeof

(int))

;return0;

}

CCF CSP 最小差值

最小差值 試題編號 201712 1 試題名稱 最小差值 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個數,請找出其中相差 差的絕對值 最小的兩個數,輸出它們的差值的絕對值。輸入格式 輸入第一行包含乙個整數n。第二行包含n個正整數,相鄰整數之間使用乙個空格分隔。輸出格式...

CCF 最小差值

試題編號 201712 1 試題名稱 最小差值 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個數,請找出其中相差 差的絕對值 最小的兩個數,輸出它們的差值的絕對值。輸入格式 輸入第一行包含乙個整數n。第二行包含n個正整數,相鄰整數之間使用乙個空格分隔。輸出格式 輸出乙個...

20171201 最小差值

問題描述 試題編號 201712 1 試題名稱 最小差值 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個數,請找出其中相差 差的絕對值 最小的兩個數,輸出它們的差值的絕對值。輸入格式 輸入第一行包含乙個整數n。第二行包含n個正整數,相鄰整數之間使用乙個空格分隔。輸出格式...