幾道面試到的演算法題

2021-06-06 05:11:39 字數 1206 閱讀 6591

1.如何判斷乙個鍊錶是否為迴圈鍊錶

乙個錯誤的想法

將乙個指標p指向頭節點,另乙個指標q往後遍歷,如果直到q為null時任然沒有遇到q==p的情況,那麼不是迴圈鍊錶,如果在其中遇到q==p的情況,則此為迴圈鍊錶。這種想法的錯誤之處在於沒有考慮到a->b->c->d->b這種迴圈不包括第乙個節點的情況。

乙個比較笨的想法

遍歷整個鍊錶,將遍歷到的節點位址放到集合中,每次都比較一下新的節點和集合中的節點,如果有重複的,則出現迴圈鍊錶。可以解決,但是要耗費大量的空間和時間。

比較好的想法:

兩個指標同時第乙個節點,乙個指標每次往後移動乙個節點,另乙個指標每次往後移動兩個節點。如果在任何乙個都不為null的時候,出現兩個指標值相同,則此為迴圈鍊錶,否則不是。

2.把1023個數隨機放到乙個10層深度的滿二叉樹中,找出一條從根到葉節點的路徑,使得該路徑經過的節點和最大。

一般的想法:

窮舉所有情況,然後找出最大的路徑。

比較好的想法

對於樹從下往上作貪心處理。從倒數第二層開始,每次選取該節點的較大的子節點加到該節點上。最後加到根節點時,就是最有路徑的值,在過程中記錄下路徑即可。

3將乙個字串整體迴圈右移n個字元,右邊的字元移至最左邊。

一般的想法

(1)新建乙個字串,根據要求將每一位進行賦值,得到結果後copy給原字串。(2)迴圈n遍,每次將字串向右移一位。

比較好的想法

題目的另乙個理解是,將字串分為兩個子串,最右邊的n個字元組成的字串b,左邊剩下的字元組成的字串a,將a和b交換位置。可以先將a左右倒置,再將b左右倒置,最後將整個字串左右倒置。這個演算法的時間複雜度為2×n,而且不需要額外空間。

4乙個陣列中有正數和負數,如何找出它的乙個子陣列,使得這個子陣列是所有子陣列中和最大的。

比較好的想法

新建乙個變數sum,將陣列從左往右遍歷,每次把遍歷到的數加到sum中去,如果sum小於0則捨棄前面的數,將sum清零。最後的結果就是sum出現過的最大的值,在過程中記錄下子陣列即可。

幾道演算法題

1 n階乘之和 public class test1 sum kk system.out.println sum 2.獲取二維陣列每列最小的值 public class test2 system.out.println sum public long jiecheng int x return su...

幾道和 堆疊 佇列 有關的面試演算法題

問題描述 給定乙個只包括 的字串,判斷字串是否有效。解題思路 這道題讓我們驗證輸入的字串是否為括號字串,包括大括號,中括號和小括號。這裡我們使用棧。動畫演示 20.valid parentheses 實現 class solution else if issym stack.peek achar e...

幾道資料結構的演算法題

一問題 給定一組字串,要求求出乙個最短的字串使得它包含所有給出的字串。比如 a bc ca 輸出應該是 bca 2 按照陣列len的記錄長度,在剩下的字串中找出記錄長度最長的 字串,a.如果這個字串包含在string中,該字串已被包含,轉2 b.如果這個字串的長度是1,將該字串與string連線,該...