数据结构笔记

将一组数中的奇数和偶数分别储存在数组两侧。
1.建立另外两个数组,分别存储奇数和偶数,然后存储到原数组。空间复杂度O(3n) 时间复杂度O(2n).
2.双指针法设置头结点和尾节点,分别遍历偶奇数,不符合则交换位置,直到头结点位置大于等于尾节点。时间复杂度O(n),空间复杂度O(n)。

#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<ctime>
using namespace std;
int arr[10001];
void seed()
{
    srand(time(0));
    for(int i=0; i<=100; i++)
    {
        arr[i]=rand()%15554;
    }
}
void solve()
{
    int i=0,j=100;
    while(i<j)
    {
        while(arr[i]%2==0)
            i++;
        while(arr[j]%2)
            j--;
        if(i>=j)
            break;
        swap(arr[i],arr[j]);
    }
//时间复杂度O(n)
}
int main()
{
    seed();
    solve();
    for(int i=0; i<=100; i++)
        cout << arr[i]<<' ';
    return 0;
}

本来以为是一个简单的题,没想到还有优化空间,双指针法我学过但是遇到题还真想不起来,以前都是一个模块一个训练,都清楚这是什么算法形成惯性思维,但是都放在一起,就傻眼了,感觉就是背了一些套路,但是就是不会用,惰性思维害死人啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值