题解 | #调整数组顺序使奇数位于偶数前面#

调整数组顺序使奇数位于偶数前面

http://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b

方法一:两次遍历

1.结题思路

简单题,两次遍历原始数组,分别将奇偶数按序加入结果数组

2.解法

遍历两次array数组,第一次遍历时,将所有奇数数组元素加入ans数组,第二次遍历时,将所有偶数数组元素加入ans数组

3.图解

图片说明

4.具体代码

vector<int> reOrderArray(vector<int>& array) {
    vector<int>ans;
    for(auto it=array.begin();it!=array.end();it++){
        if(*it&1)ans.push_back(*it);
    }
    for(auto it=array.begin();it!=array.end();it++){
        if(*it%2==0)ans.push_back(*it);
    }
    return ans;
}

5.时间复杂度和空间复杂度分析

时间复杂度:O(n),n是数组元素个数,仅遍历了两次数组。
空间复杂度:O(n),n是数组元素个数,用到了一维数组。

方法二:移动数组元素

1.结题思路

有点类似插入排序的思想,数组分成两部分,前半部分放我们已经处理好的调到前面来的奇数,后半部分放偶数,每次将奇数插入已排列好的奇数尾部。

2.解法

首先用一个变量pre保存已经移动到数组前部的奇数的下一个存放位置的下标,接着用变量temp临时保存一个这个奇数,并将前面所有的偶数后移一位,最后将temp所保存的奇数填入ans[pre],并更新pre++

3.图解

图片说明

4.具体代码

/*vector<int> a;
  for(int i=0;i<10;i++)
  a[i]=i;
这种做法以及类似的做法都是错误的。下标只能用于获取已存在的元素;而现在的a[i]还是空的对象*/
vector<int> reOrderArray(vector<int>& array) {
    vector<int>ans(array);//用array来定义ans; 
    int pre=0;
    for(int i=0;i<array.size();i++){
        if(array[i]&1){
            int temp=array[i];
            for(int j=i;j>pre;j--){
                ans[j]=ans[j-1];
            }
            ans[pre++]=temp;
        } 
    }
    return ans;
}

5.时间复杂度和空间复杂度分析

时间复杂度:O(n^2),n是数组元素个数,类比插入排序,平均情况O(n^2)。
空间复杂度:O(n),n是数组元素个数。

全部评论

相关推荐

头像
04-27 15:11
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3&nbsp;投递、测评3.12&nbsp;笔试3.18&nbsp;一面3.25&nbsp;二面4.13&nbsp;ai面(hr面)4.14&nbsp;英语测评4.23&nbsp;offer(已拒)腾讯:2.6&nbsp;测评2.28&nbsp;wxg一面3.5&nbsp;wxg二面(挂)3.11&nbsp;teg一面3.21&nbsp;teg二面(取消)3.31&nbsp;teg一面4.10&nbsp;teg二面(挂)4.21&nbsp;wxg一面4.24&nbsp;wxg二面(挂)字节:1.28&nbsp;aml约面(取消)3.17&nbsp;火山一面(挂)4.8&nbsp;aml一面(挂)4.20&nbsp;抖音data一面(挂)阿里:3.23&nbsp;投递、测评3.28&nbsp;笔试3.31&nbsp;淘天一面4.8&nbsp;钉钉一面4.9&nbsp;淘天二面4.10&nbsp;阿里控股一面4.12&nbsp;钉钉二面(取消)4.15&nbsp;淘天hr面4.16&nbsp;淘天offer(已接)4.21&nbsp;高德一面(取消)4.22&nbsp;淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm&nbsp;api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
绿糖滑稽:携程这什么雷霆流程时长
我的求职进度条
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务