演算法訓練(二)陣列反轉

2021-08-19 03:16:26 字數 1114 閱讀 8889

題目一:把帶有空格的一句話例如:i am a boy 變成 boy a am i 

單詞順序全部反轉,但是單詞內部的字母順序以及空格相對位置不能變。

思路:一次就轉換成功看起來有些困難,於是這裡分兩步進行。

i am a boy --> yob a ma i -->boy a am i

首先將陣列全部反轉,但發現這時候單詞中的字母順序也改變了,因此還需要進行一次單詞內部的反轉。從這裡可以看出,我們需要進行兩次反轉操作。在寫**的時候就要注意了。

根據傳的引數確定反轉的位置 函式:這裡引數寫進去要反轉的起始位置,方便後續操作。在確定迴圈中交換的位置的時候可以先模擬幾個數字,找規律。

public static voidreversearray(charwords,intstart,intend) 

}

反轉函式:注意,這裡首先要將整個句子反轉,得到中間的狀態。思考如何反轉單詞內部呢?這裡注意到每遇到乙個空格就相當於馬上有下乙個單詞了,所以可以根據空格確定要反轉的小單詞的位置。注意最後乙個單詞。

public static voidswapstring(charwords) 

}reversearray(words, j, i);

}

題目二:把陣列的後面k個元素移到前面。例如 wqmdnzxln1234 把後面6個移到前面,變為ln1234wqmdnzx。

思路:雖然此題有很多種解法,例如可以新建乙個陣列,然後找到原陣列後面k個,先放入新陣列,再將剩下的放入新陣列。但這樣需要重新開闢乙個o(n)的空間,時間複雜度也很高。我們需要另外想乙個更好的方案。

根據上面一道題,我們可以進行兩次操作。 wqmdnzxln1234 -->4321nlxzndmqw-->ln1234wqmdnzx

相當於先反轉整個陣列,然後再分別反轉前面k個和剩下的部分。

public static voidswapkarr(charwords,intk)

資料結構與演算法 二 陣列反轉 reverse

前面我們提到了陣列,現在我們就以陣列來實現反轉 如我們定義乙個陣列 int array 反轉無疑就是將陣列下標第0個元素與下標最後乙個元素互換,然後是第1個元素與倒數第2個元素的互換,依次類推 我們設想陣列長度為基數或偶數都沒有問題 我們需要乙個方法,在方法中就做一件事情,那就是交換元素,在交換元素...

演算法訓練 動態陣列使用

演算法訓練 動態陣列使用 時間限制 1.0s 記憶體限制 512.0mb 從鍵盤讀入n個整數,使用動態陣列儲存所讀入的整數,並計算它們的和與平均值分別輸出。要求盡可能使用函式實現程式 平均值為小數的只保留其整數部分。樣例輸入 53 4 0 0 2 樣例輸出 9 1樣例輸入 73 2 7 5 2 9 ...

演算法 java 實現陣列的反轉

陣列的反轉原理跟氣泡排序有點像,都是通過交換位置,只不過陣列的反轉是交換第乙個和最後乙個的位置,第二個和倒數第二個的位置,氣泡排序是互動相鄰兩個的位置.下面看一下具體的 實現 package test 陣列的反轉 public class testdemo for int elem arr 列印反轉...