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

2021-10-01 04:24:43 字數 1070 閱讀 6759

有這樣乙個陣列a,大小為n,相鄰元素差的絕對值都是1。如:a=。現在,給定a和目標整數t,請找到t在a中的位置。除了依次遍歷,還有更好的方法麼?

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

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

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

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

// 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 arr...

白話經典演算法系列之八 白話經典演算法之七大排序總結篇

在我的部落格對氣泡排序,直接插入排序,直接選擇排序,希爾排序,歸併排序,快速排序和堆排序這七種常用的排序方法進行了詳細的講解。首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有...

白話經典演算法系列之 快速排序 快速搞定

總的說來,要直接默寫出快速排序還是有一定難度的,因為本人就自己的理解對快速排序作了下白話解釋,希望對大家理解有幫助,達到快速排序,快速搞定。快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod ...