首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的可塑性循环旋转

C#中的可塑性循环旋转
EN

Code Review用户
提问于 2019-09-20 12:31:33
回答 1查看 2.3K关注 0票数 2

我正在学习C#,我用java编程了一些东西,我想对我的C#代码有一个反馈。

这个练习来自codility

目标是旋转数组A、K次;也就是说,A的每个元素将被移动到正确的K次。编写一个函数:类解决方案{公共int[]解决方案(int[] A,int K);}给定由N个整数和整数K组成的数组A,返回数组A旋转的K次。例如,给定A= 3、8、9、7、6 K=3,函数应该返回9、7、6、3、8。进行了三次旋转:3、8、9、7、6 -> 6、3、8、9、7 -> 7、6、3、8、9 -> 9、7、6、3、8 (另一个例子),给定A= 0 0 0 K=1时,函数应该返回0 0 0给定的A= 1,2,3,4 K=4,函数应该返回1,2,3,4

这是我的密码。它给出了100%,但也许一些东西可以是improved.Thanks的建议。

代码语言:javascript
复制
using System;
// you can also use other imports, for example:
// using System.Collections.Generic;

// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");

class Solution {
    public int[] solution(int[] A, int K) {
        int len = A.Length;
        int[] B = new int[len];
        if(len > 0 && K % len != 0 )
        {
            for ( int i = 0; i < len; i++)
            {
                B[(K + i) % len] = A[i];
            }
        }
        else
        {
            return A;
        }
        return B;
    }
}
EN

回答 1

Code Review用户

回答已采纳

发布于 2019-09-20 14:19:47

良好做法

  • 如果数组的长度是K的乘法,我喜欢不旋转的事实。
  • 正如您在注释中所述,第二个数组B被创建得太早,因为在某些情况下,它将被创建为徒劳。

评论

  • 这个挑战显然是为Java:class Solution { public int[] solution(int[] A, int K); }编写的。提供的签名值得自己审查(大写约定、静态成员、有意义的成员名称)。但是,如果您“不能”更改给您的签名,我将保持一致,使用N而不是len来表示数组的长度。
  • 您有时返回提供的数组,有时创建一个新的数组。我会在说明书中非常清楚地说明这一点。使用者应知道是否或何时返回副本。这会影响对象的进一步使用。
  • 您应该防止源数组为空。
  • 如何处理K的负值?如果你想一想,左旋转就是右旋转的反义词。
  • 嵌套语句可以通过倒置if语句和提前退出来防止。嵌套较少的语句通常会增加可读性。
  • 对于较大的数组,您应该检查Buffer.BlockCopy以优化将数组的部分复制到另一个数组。在给定枢轴的情况下,可以看到将两个部分从一个数组复制到另一个数组的旋转。看看这篇文章关于这个主题。
  • 如果您可以更改签名,使用静态方法创建一个静态类,使用有意义的方法名RotateRight (带有参数arraycount ),并明确说明是执行原地旋转还是创建新数组。
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/229371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档