有這樣乙個陣列a,長度為n,相鄰元素的絕對值都為1,例如a=,現給定數字a,設計演算法求a在a中的位置。
陣列第乙個數為array[0], 要找的數為y,設t = abs(y - array[0])。由於每個相鄰的數字之差的絕對值為1。故第t個位置之前的數肯定都比y小。因此直接定位到array[t],重新計算t,t = abs(y – array[t]),再重複上述步驟即可。這種演算法主要利用了當前位置的數與查詢數的差來實現跨越式搜尋。演算法效率要比遍歷陣列的演算法要高一些,並且易於實現。
int
findtargetinarray
(int
*nums,
int numssize,
int target)
return-1
;}
#include
"stdafx.h"
#include
#include
void
printarray
(int
*nums,
int numssize)
intfindtargetinarray
(int
*nums,
int numssize,
int target)
return-1
;}intmain()
;printarray
(nums,10)
;int target =7;
printf
("%d\t%d\n"
, target,
findtargetinarray
(nums,
10, target));
return0;
}
一道有趣的演算法題
日前在網上看到一道演算法題。頗有意思,也細細的研究一番。現將該題發布於此,和各位交流一下。同時,本文也是筆者首次使用office2007的部落格功能,看看效果怎麼樣。某幢大樓有100層。你手裡有兩顆一模一樣的玻璃珠。當你拿著玻璃珠在某一層往下扔的時候,一定會有兩個結果,玻璃珠碎了或者沒碎。這幢大樓有...
一道有趣的構造題
題意 以下是三道證明題,均在平面上進行討論。以下 x0 y0 x1 y1 x 0,y 0 x 1,y 1 x0 y 0 x1 y1 表示一條從 x0 y0 x 0,y 0 x0 y 0 到 x1 y1 x 1,y 1 x1 y 1 的直線。其中,一條直線與乙個點集合相交表示這條直線上存在乙個點,這個...
一道有趣的非同步題
const delay ms new promise resolve settimeout resolve,ms const subflow createflow delay 1000 then log c createflow log a log b subflow,delay 1000 then...