第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

對(duì)大小為 n 的數(shù)組進(jìn)行左旋轉(zhuǎn)操作移位

對(duì)大小為 n 的數(shù)組進(jìn)行左旋轉(zhuǎn)操作移位

C#
侃侃爾雅 2022-11-13 14:56:17
我嘗試在大小為 n 的數(shù)組上實(shí)現(xiàn)左旋轉(zhuǎn)。例如,我有數(shù)組 = {1,2,3,4,5};我有幾個(gè)班次:班次 = 2;處理數(shù)組后,它必須如下所示:數(shù)組 = {3,4,5,1,2};我用兩個(gè)for循環(huán)實(shí)現(xiàn)了它:var array = new int[]{1,2,3,4,5};var shifts =3;var temp = 0;for(var j = 0; j < shifts; j++){     temp = array[0];     for(var i = 0; i < array.Length -1; i++){         array[i] = array[i + 1];     }     array[array.Length-1] = temp;}for(var i =0 ; i< array.Length; i++){    System.Console.Write(array[i]+ " ");} Console.Read();它正在工作,但它沒有通過一些數(shù)組中有大量數(shù)字的測(cè)試,我因超時(shí)錯(cuò)誤而被終止;有沒有辦法在一個(gè)循環(huán)中實(shí)現(xiàn)左旋轉(zhuǎn)?
查看完整描述

4 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

我認(rèn)為這與就地旋轉(zhuǎn)陣列一樣有效。適用于左右旋轉(zhuǎn),具體取決于 的符號(hào)rotateBy:


private static void Rotate<T>(T[] array, int rotateBy)

{

    rotateBy %= array.Length;

    // Nothing to do?

    if (rotateBy == 0)

        return;

    // Normalize it to a right rotation

    if (rotateBy < 0)

        rotateBy = array.Length + rotateBy;

    // Allocate the smallest possible temp array

    if (rotateBy > array.Length / 2)

    {

        T[] temp = new T[array.Length - rotateBy];

        Array.Copy(array, 0, temp, 0, array.Length - rotateBy);

        Array.Copy(array, array.Length - rotateBy, array, 0, rotateBy);

        Array.Copy(temp, 0, array, rotateBy, array.Length - rotateBy);

    }

    else

    {

        T[] temp = new T[rotateBy];

        Array.Copy(array, array.Length - rotateBy, temp, 0, rotateBy);

        Array.Copy(array, 0, array, rotateBy, array.Length - rotateBy);

        Array.Copy(temp, 0, array, 0, rotateBy);  

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-11-13
?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊

這是作弊,但 LINQ 解決方案可能是:


var array = Enumerable.Range(0, 100).ToArray();

var shiftBy = 2;

var shifted = array.Skip(shiftBy).Concat(array.Take(shiftBy)).ToArray();

如果您的任務(wù)只是以這種轉(zhuǎn)換的方式“查看”數(shù)組,為避免創(chuàng)建新數(shù)組,請(qǐng)排除末尾.ToArray()并直接迭代IEnumerable<int>。


查看完整回答
反對(duì) 回復(fù) 2022-11-13
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

使用具有輪班數(shù)量大小的旋轉(zhuǎn)緩沖區(qū)使其工作。


static void ShiftLeft(int[] array, int shifts)

{

    int length = array.Length;

    int actualShifts = shifts % length;

    if (actualShifts == 0) return;

    int[] buffer = new int[actualShifts];

    Array.Copy(array, buffer, actualShifts);

    int indexAddition = actualShifts - (length % actualShifts);

    for (int i = length - 1; i >= 0; i--)

    {

        int current = array[i];

        int bufferIndex = (i + indexAddition) % actualShifts;

        array[i] = buffer[bufferIndex];

        buffer[bufferIndex] = current;

    }

}

編輯:正如@canton7 所指出的,循環(huán)緩沖區(qū)增加了不必要的復(fù)雜性。下面應(yīng)該做,基本上是@canton7 的答案,盡管@canton7 由于緩沖區(qū)較小,他的答案仍然更有效:


int length = array.Length;

int actualShifts = shifts % length;

if (actualShifts == 0) return;

int[] buffer = new int[actualShifts];

Array.Copy(array, buffer, actualShifts);

Array.Copy(array, actualShifts, array, 0, length - actualShifts);

Array.Copy(buffer, 0, array, length - actualShifts, actualShifts);


查看完整回答
反對(duì) 回復(fù) 2022-11-13
?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊

import java.util.*;

 public class ArrayRotation{

     public static void main(String[] args) {

         Scanner sc=new Scanner(System.in);

         System.out.println("enter size of array:");

         int n=sc.nextInt();                                         

         int arr[]=new int[n];

         System.out.println("enter elements:");

         for(int i=0;i<n;i++)

         arr[i]=sc.nextInt();

         System.out.println("enter shifts:");

         int d=sc.nextInt();

         int arr1[]=new int[d];

         for(int i=0;i<d;i++)

         arr1[i]=arr[i];

        System.out.println("Array after rotating");

        for(int i=d;i<n;i++)

          System.out.print(arr[i]+" ");

        for(int i=0;i<d;i++)

         System.out.print(arr1[i]+" ");

}

}


查看完整回答
反對(duì) 回復(fù) 2022-11-13
  • 4 回答
  • 0 關(guān)注
  • 158 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)