1. 程式人生 > >陣列迴圈右移 k 位

陣列迴圈右移 k 位

例: arr[] = 12345678; k = 2

1.逆序前 6(8-2) 位 -> 65432178
2.逆序後 2 位 -> 65432187
3.全部逆序 -> 78123456

private static void reverseK(int[] arr,int k) {
        if(arr != null) {
            int n = arr.length;
            k = k % n;
            reverse(arr, 0, n-1-k);
            reverse(arr, n-k, n-1
); reverse(arr, 0, n-1); } } private static void reverse(int[] arr,int begin,int end) { for( ; begin < end; begin++,end--) { int temp = arr[begin]; arr[begin] = arr[end]; arr[end] = temp; } }

相關推薦

把一個含有N個元素的陣列迴圈K, 要求時間複雜度為O(N)

分析與解法 這個解法其實在《啊哈!演算法》有講到。 假設原陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位,比較之後,不難看出,其中有兩段的順序是不變的:1234和abcd,可把兩段看成兩個整體。右移K位的過程就是把陣列的兩部分交換一下。

day23之陣列迴圈k+去除重複的字元。

將N個字元的陣列,迴圈右移K位。時間複雜度O(N)。 #include<iostream> using namespace std; #include<cassert> #include<string.h> vo

陣列迴圈 k

例: arr[] = 12345678; k = 2 1.逆序前 6(8-2) 位 -> 65432178 2.逆序後 2 位 -> 65432187 3.全部逆序 -> 7

陣列迴圈k

將陣列移位就相當於將兩部分序列交換位置,於是將陣列移位轉換為三次反轉操作,如123456右移2位結果為561234,過程:分別將1234和56反轉為4321和65,之後對反轉結果432165做一次反轉結果為561234,java程式碼如下: //將數字

把一個含有N個元素的陣列迴圈K,要求時間複雜度為O(N)

分析與解法 假設原陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位,比較之後,不難看出,其中有兩段的順序是不變的:1234和abcd,可把兩段看成兩個整體。右移K位的過程就是把陣列的兩部分交換一下。變換過程通過以下步驟完成: 1.逆序排列

實現將一維陣列A(下標從1開始)中的元素迴圈k,要求只用一個元素大小的輔助空間

#include<stdio.h>main(){ int n,arrary[50],k,temp; printf("請輸入陣列元素個數:\n"); scanf("%d",&n); for(int i=1;i<=n;i++) scanf

設計一個演算法,將一維陣列A(下標從1開始)中的元素迴圈k,要求只用一個元素大小的附加儲存空間。給出演算法的時間複雜度。

程式碼 #include<stdio.h> #include<stdlib.h> #define n 10 int main() { int a[n] = { 0,1,2,3,4,5,6,7,8,9 }; int k, t=0,i,j,m; printf(

陣列:如何把一個數組迴圈K

問題描述: 假設要把陣列12345678右移2位,變為78123456。 分析: 方法一: 比較移位前後陣列序列的形式,不難看出,其中有兩段序列的順序是不變的,即就是 78 和 123456, 可以把這兩段看做兩個整體,右移k位就是把陣列的兩部分交換一下。時間複雜度為

將N個字元的陣列迴圈K。時間複雜度O(N)。

將N個字元的陣列,迴圈右移K位。時間複雜度O(N) eg:str[]=”abcde123”,右移3位 1、旋轉abcde->edcba 2、旋轉123->321 3、整體旋轉

陣列元素迴圈k個位置(Java實現)

用四種方法實現了將陣列元素迴圈右移k個位置,相關的解釋作為註釋放在程式碼裡面了。 package movearrayelement; import java.util.BitSet; public class MoveArrayElement { /** * 每次

實現字串迴圈n 與左n(建立陣列

編寫一個函式,作用是把一個 char 組成的字串迴圈 右移 n 個。 比如原來是“abcdefghi” 如果 n=2,移位後應該是“hiabcdefgh”   左移n個 比如原來是“abcdefghi

實現將一維數組A(下標從1開始)中的元素循環k,要求只用一個元素大小的輔助空間

維數 輔助 數組a emp 數組元素 移動 scan clu n) #include<stdio.h>main(){ int n,arrary[50],k,temp; printf("請輸入數組元素個數:\n"); scanf("%d",&n); for

6-1 陣列迴圈

本題要求實現一個對陣列進行迴圈右移的簡單函式:一個數組a中存有n(>0)個整數,將每個整數迴圈向右移m(≥0)個位置,即將a中的資料由(a​0a1⋯a​n−1)變換為(a​n−m⋯an−1a0a1⋯a​n−m−1)(最後m個數迴圈移至最前面的m個位置)。 函式介面定義: int A

【練習題】編寫一個函式,把一個char組成的字串迴圈n

例如:原來是”abcdefghi”,如果n = 2,移位後應該是”hiabcdefg”。 思路:當讀到這個題目的時候,沒有編寫過類似程式的人可能會想,程式的實現就是依照字元的迴圈右移這樣實現的,但仔細想會發現這樣很難實現,不妨換一種思路,我們先把需要移到前面的字元取出來放進

1008 陣列迴圈演算法練習(利用陣列逆轉的方法)

一個數組A中存有N(N>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移M(M>=0)個位置,即將A中的資料由(A0A1……AN-1)變換為(AN-M …… AN-1 A0 A

陣列迴圈和約瑟夫環問題

1. 把陣列中的每個數迴圈右移n位,要求時間複雜度O(n),空間複雜度O(1) package cn.lifx.test; public class RightMove { public static void main(String[] args) { int

【資料結構】單鏈表迴圈K

例如連結串列資料有:1 2 3 4 5 6 7 8 910 左移2位 結果為 3 4 5 6 7 8 9 10 1 2 需要處理邊界情況 :左移11位 顯示錯誤 ,左移0位 顯示錯誤 ,左移10位 顯示錯誤。 void leftshift(LinkList List,

把一個char組成的字串迴圈n

void LoopMove(char *pStr, int steps) { int n = strlen(pStr) - steps; char temp[MAX_LEN]; strcpy(temp, pStr + n); strcpy(temp + steps,

將數組k

code pub 思路 str print 右移 ++ println 互換 思路 : 反轉的算法 *3次即可先把 第 k-n-1 反轉把0 -k-1 反轉整體反轉 即可 //把數組循環右移K位 public class Test_plus { /* *數組