一道算法题的解析

看到过这么一个算法题,据说是一个面试题。一个整数数组,包含有正数和负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序 比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时间复杂度O(N),空间O(1)

    先看个时间复杂度O(n^2)的:

for(i=n-1; i>=0; i--)
{
    int j=i;
    int k=0;
    int temp=0;
    
    if(a[j]<0)//如果是负数
        k++;//加1.

    else if(a[j]>0&&k==0)//否则,如果是正数,且后面没有负数(k==0)
             continue;//跳出本次循环

         else//否则
        {
          temp=a[j];//暂存这个正数。
  
          for(int m=1; m<=k; m++)//移到所有的负数后面去。
          {
              a[j+m-2]=a[j+m-1];
           }
           a[j+m-1]=tmp;
           continue;
         }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值