「一步千里」之陣列找數

2021-09-02 12:09:14 字數 1128 閱讀 2504

有這樣乙個陣列

a,大小為

n,相鄰元素差的絕對值都是

1。如:a=。

現在,給定

a和目標整數

t,請找到t在

a中的位置。除了依次遍歷,還有更好的方法麼?

這道題目的解法非常有趣。

陣列第乙個數為array[0], 要找的數為y,設t = abs(y - array[0])。由於每個相鄰的數字之差的絕對值為1。故第t個位置之前的數肯定都比y小(個人認為還有可能比之前的數都比y大的可能)。因此直接定位到array[t],重新計算t,t = abs(y – array[t]),再重複上述步驟即可。這種演算法主要利用了當前位置的數與查詢數的差來實現跨越式搜尋。演算法效率要比遍歷陣列的演算法要高一些,並且易於實現。

完整的**如下:

[cpp]view plain

copy

// 【白話經典演算法系列之十五】「一步千里」之陣列找數

//  by morewindows(  ) 

//  歡迎關注

#include 

#include 

void printfarray(int a, int n)    

int findnumberinarray(int arr, int n , int find_number)  

return -1;  

}  int main()  

;  printfarray(arr, maxn);  

for (int i = 0; i < maxn; i++)  

printf("查詢%d   \t下標為%d\n", arr[i], findnumberinarray(arr, maxn, arr[i]));  

printf("查詢%d   \t下標為%d\n", -1, findnumberinarray(arr, maxn, -1));  

printf("查詢%d   \t下標為%d\n", 0, findnumberinarray(arr, maxn, 0));  

printf("查詢%d   \t下標為%d\n", 100, findnumberinarray(arr, maxn, 100));  

return 0;  

「一步千里」之陣列找數

歡迎關注微博 有這樣乙個陣列a,大小為n,相鄰元素差的絕對值都是1。如 a 現在,給定a和目標整數t,請找到t在a中的位置。除了依次遍歷,還有更好的方法麼?這道題目的解法非常有趣。陣列第乙個數為array 0 要找的數為y,設t abs y array 0 由於每個相鄰的數字之差的絕對值為1。故第t...

白話經典演算法系列之十五 「一步千里」之陣列找數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!歡迎關注微博 有這樣乙個陣列a,大小為n,相鄰元素差的絕對值都是1。如 a 現在,給定a和目標整數t,請找到t在a中的位置。除了依次遍歷,還有更好的方法麼?這道題目的解法非常有趣。陣列第乙個數為array 0 要找的數為y,設t abs y arr...

白話經典演算法系列之十五 「一步千里」之陣列找數

有這樣乙個陣列a,大小為n,相鄰元素差的絕對值都是1。如 a 現在,給定a和目標整數t,請找到t在a中的位置。除了依次遍歷,還有更好的方法麼?這道題目的解法非常有趣。這道題目的解法非常有趣。陣列第乙個數為array 0 要找的數為y,設t abs y array 0 由於每個相鄰的數字之差的絕對值為...