題目:
給你一個長度固定的整數數組 arr,請你將該數組中出現的每個零都複寫一遍,並將其餘的元素向右平移。
注意:請不要在超過該數組長度的位置寫入元素。
要求:請對輸入的數組 就地 進行上述修改,不要從函數返回任何東西。
示例 1:
輸入:[1,0,2,3,0,4,5,0]
輸出:null
解釋:調用函數後,輸入的數組將被修改爲:[1,0,0,2,3,0,0,4]
示例 2
輸入:[1,2,3]
輸出:null
解釋:調用函數後,輸入的數組將被修改爲:[1,2,3]
提示:
1 <= arr.length <= 10000
0 <= arr[i] <= 9
分析:
數組不能平移元素,但是題目不一樣,題目是插入一個元素,把後面的元素往後擠,後面的元素是不是就類似於平移了,那這樣擠得結果是最後一個元素被倒數第二個元素代替,倒數第二個元素被倒數第三個元素代替,循環下去。
(1)首先得遍歷數組找0
(2)如果找到0了,是不是我們應該遍歷0後面得元素,從後往前遍歷
(3)arr[y]應該大於x+1,要不然和0撞上了,我們是不是應該跳過a[x+1],那麼在插入0之後讓x++是不是就可以了
(4)主函數裏直接調用方法,不要加輸出,輸出一個方法,就是輸出方法的返回值,這個方法的返回值是void,就沒有返回值。
代碼如下:
public class pingyi {
public static void main(String[] args) {
int arr[]= {1,0,2,3,0,4,5,0};
getMove(arr);
}
public static void getMove(int arr[]) {
for(int x=0;x<arr.length;x++) {
if(arr[x]==0) {
for(int y=arr.length-1;y>x;y--) {
arr[y]=arr[y-1];
}
arr[x+1]=0;
x++;
}
}
for (int x=0;x<arr.length;x++) {
System.out.print(arr[x]);
}
}
}