给定一个数n,int类型的;求个数组,数组中有n个元素,每个元素是i的平方,i是从0开始的数组的索引

xingeddx 2014-05-20 12:53:01
RT,我的算法是这样的,
        int []arr = new int[n];

for(int i=0;i<n;i++)
{
arr[i] = i*i;
}
return arr;

但是不是最优的,想找一个更好的算法。
...全文
401 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingeddx 2014-05-21
  • 打赏
  • 举报
回复
引用 6 楼 caozhy 的回复:
return Enumerable.Range(0, n).Select(x => x * x).ToArray();
没有提示最优的,感觉应该是在算法上能提升
xingeddx 2014-05-21
  • 打赏
  • 举报
回复
引用 5 楼 CHEN504390172 的回复:
回家一看下标错鸟,arr[n-i]越界啦……

        int []arr = new int[n];          
        for(int i=0;i<n/2;i++)
        {
            arr[i] = i*i;
           arr[n-i-1] =(n-i-1)*(n-i-1);
        }
        return arr;
时间复杂度是原来的二分之一 追求更优一点,不过这样不推荐哈……看着眼花……

           int []arr = new int[n];          
        for(int i=0;i<n/2;i=i+2)
        {
            arr[i] = i*i;
           arr[i+1] = (i+1)*(i+1)
           arr[n-i-1] =(n-i-1)*(n-i-1);
           arr[n-i-2] =(n-i-2)*(n-i-2)
        }
        return arr;  
时间复杂度原来四分之一……
我感觉循环次数是少了一半,但是每一次的循环使用的时间感觉是“加倍”,2*4和4*2
bwangel 2014-05-20
  • 打赏
  • 举报
回复
所有算法时间复杂度都是O(n),没有变化。楼上的所谓1/2,1/4都不靠谱。 相反增加了代码的复杂度,降低了可读性,增加了出错机率。
threenewbee 2014-05-20
  • 打赏
  • 举报
回复
return Enumerable.Range(0, n).Select(x => x * x).ToArray();
Landy_cc 2014-05-20
  • 打赏
  • 举报
回复
回家一看下标错鸟,arr[n-i]越界啦……

        int []arr = new int[n];          
        for(int i=0;i<n/2;i++)
        {
            arr[i] = i*i;
           arr[n-i-1] =(n-i-1)*(n-i-1);
        }
        return arr;
时间复杂度是原来的二分之一 追求更优一点,不过这样不推荐哈……看着眼花……

           int []arr = new int[n];          
        for(int i=0;i<n/2;i=i+2)
        {
            arr[i] = i*i;
           arr[i+1] = (i+1)*(i+1)
           arr[n-i-1] =(n-i-1)*(n-i-1);
           arr[n-i-2] =(n-i-2)*(n-i-2)
        }
        return arr;  
时间复杂度原来四分之一……
Landy_cc 2014-05-20
  • 打赏
  • 举报
回复

 int []arr = new int[n];
         
        for(int i=0;i<n/2;i++)
        {
            arr[i] = i*i;
           arr[n-i] =(n-i)*(n-i);
        }
        return arr;
复杂度减少一半
C囧囧 2014-05-20
  • 打赏
  • 举报
回复
你所谓的最优是指那个方面?如果是减少运行时间,可以直接用常量填充……虽然看起来很笨
欢乐的小猪 2014-05-20
  • 打赏
  • 举报
回复
如果你的不是最优的。那就是计算让别人来做喽。。 假设有那么一个数组ArrA满足你的要求。 然后你就定义一个数组ArrB=ArrA。最简单了
zhangping321_123 2014-05-20
  • 打赏
  • 举报
回复
我写一个,不一定比你的好 List<int> list=new List<int>(); for(int i=0;i<n;i++) list.Add(i*i); return list.ToArray();

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧