數字環(旋轉陣列)

2021-10-11 19:16:34 字數 1181 閱讀 8079

數字環

有乙個長度為n的數字環, 將每個數字往後移動m位, 使其成為乙個新的數字環

輸入:第一行: n 表示有n個數字

第二行: n個整數an, 表示數字環的每個元素

第三行: m 表示每個元素需要往後移動m位

(1<n<100, 0<an<1000, 0<=m<=100)

輸出: 移動後的新數字環

樣例輸入:

101 2 3 4 5 6 7 8 9 10

2樣例輸出:

9 10 1 2 3 4 5 6 7 8

解法1:

暴力法:

public

class

digitalring

//移動位數

int m=sc.

nextint()

;//數字移動

m%=nums.length;

for(

int i=

0;i) nums[0]

=temp;

}//列印輸出移動後的數字

for(

int num:nums)

}}

上述解法,時間複雜度為o(k*n),空間複雜度為o(1)

解法2:

環形替換:

該方法主要思路是這樣子的,確定了移動次數k後,第0位資料nums[0]去到第nums[k],nums[k]這個時候用temp來儲存,然後去到計算得出的下乙個位置(next=(cur + k) % n),下乙個位置的元素再去到temp儲存,以此類推,直到最後乙個元素找到位置。

public

class

digitalring

//移動位數

int m=sc.

nextint()

;//數字移動

m %= nums.length;

// 記錄交換位置的次數

int count=0;

for(

int start=

0;count)while

(start!= cur)

;//列印輸出移動後的數字

for(

int num:nums)

}}

解法2時間複雜度為o(n),空間複雜度為o(1)。

旋轉陣列最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列 為的乙個旋轉,該陣列的最小值為1。code int min int numbers,int length int low 0 int high length 1 in...

旋轉陣列最小數字

旋轉陣列最小數字 劍指offer 二分查詢 題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。解題思路 題目要求找到最小元素,第一反應是排序,但陣列基本有序直接排序浪費效能。結合資料的特點前半部分遞增,後半部分遞減,...

788 旋轉數字

我們稱乙個數 x 為好數,如果它的每位數字逐個地被旋轉 180 度後,我們仍可以得到乙個有效的,且和 x 不同的數。要求每位數字都要被旋轉。如果乙個數的每位數字被旋轉以後仍然還是乙個數字,則這個數是有效的。0,1,和 8 被旋轉後仍然是它們自己 2 和 5 可以互相旋轉成對方 6 和 9 同理,除了...