陣列和;及此起彼伏分析

紫鳳發表於2013-09-09

今日面試題:陣列和

有陣列A={5,3,8,9,16},第一次遍歷有:A = {3-5,8-3,9-8,16-9}={-2,5,1,7},陣列中元素和為-2+5+1+7=11;第二次遍歷有:A = {5-(-2),1-5,7-1}={7,-4,6},元素和為9.

給定陣列A,求第n次遍歷之後,陣列中元素的和。

======================================================

此起彼伏分析

原題

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

分析

最近有不少的同學反應題目比較簡單,還有的同學反應題目有些難,還有的同學的反映很簡單:“見過!” 在這裡,需要做一下簡單的說明:

  • 每天一個題目,確實很難考慮的面面俱到,又要考慮剛剛開始的同學,又要考慮已經比較厲害的同學。所以,只是簡單和容易的每天交替著來。

  • 到目前為止,基本都是找的各大公司的面試題,少有原創的面試題。所以,見多識廣的同學,肯定是經常有見過的。不過,這個沒有關係,溫故知新,我相信重新思考,會給大家帶來更多的進步。尤其是可以看到更多人的思路,這個帶來的進步是巨大的。

  • 我們也希望同學能夠多貢獻一些高質量的題目。

  • 不會出一些完全是ACM比賽的題目。還是要照顧大多數。

所以,無論題目難易、新舊,只要思考,都會有新的提高。

現在我們來看看今天的題目,今天的題目,最直接的就是遍歷,訪問每一個元素,並且進行比較。這是任何一個、沒有任何特點的陣列,都可以採用的方法。也就是,相鄰元素差的絕對值,我們沒有使用。

那麼如何來利用這個特點呢?看下面的陣列:

23456545678

如果,我們要找到t=8,則按照如下步驟進行,指標初始指向第一個元素

  • 與第一個元素2比較,差值為6,指標指向第6元素,

  • 當前元素為4,與8比較,差值為4,指標指向第10元素

  • 當前位置為8,找到元素。

為什麼可以直接跳躍指到到第6,或者第10個元素呢?原因就是,相鄰元素的差的絕對值都是1.這樣,針對第一步來說,當前值2與t=8相 差6,如果t在陣列中存在,則一定在2的後面第6個以後,而且,只有當2的後面,每一個都是+1的時候,才會在第6個位置找到t。其他的情況,一定都小於 t。

總結下演算法過程:

1. 當前元素與t比較,差為0,則找到;

2. 否則,得到差值為k,指標跳到當前元素後的第k個元素。

3. 重複這兩步,直到找到t或者t不在陣列中。

【分析完畢】

本文來自微信:待字閨中,2013-08-31釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。

相關文章