2018.2.17--双指针、kaggle入门

2018.2.17–双指针、kaggle入门

双指针

广义上的双指针,是利用问题本身与序列的特性,使用两个下标i、j对序列进行扫描,以较低的复杂度解决问题,一般是O(n)

例如,在于给定的一个递增的正整数序列和一个正整数M,求数列中两个不同的位置的数a和b,使他们的和恰好为M,输出所有满足的答案。

对于这个问题,使用二重循环枚举序列中的数,是比较直接的思路,但是,时间复试度为O(n*2)

但是,使用双指针可以将时间复杂度降低到O(n),代码如下:

while(i<j){//i = 0, j = n-1
    if(a[i]+a[j]==m){
        printf("%d %d\n",i,j);
        i++;
        j--;
    } else if(a[i]+a[j]<m) {
        i++;
    } else if(a[i]+a[j]>m){
        j--;
    }
}

这种思路跟我们合并递增序列的思路是一致的。

int merge(int A[],int B[],int C[],int n,int m)
{
    int i = 0, j = 0, index = 0;
    while(i < n && j < m)
    {
        if(A[i]<=B[i])
        {
            C[index++] = A[i++];
        }
        else
        {
            C[index++] = B[j++];
        }
    }
    while(i < n)
        C[index++] = A[i++];
    while(j < m)
        C[index++] = B[j++];
    return index;
}
kaggle竞赛

今天大致了解了一个比赛的赛制,以及参赛的须知,准备在考研面试之前完成kaggle的入门赛题titanic,为自己的复试加点分。

Titanic: Machine Learning from Disaster

非常感谢 Linghao Zhang 同学写的Kaggle 入门指南,受益匪浅。

推荐刚刚起步的同学先去了解一下


今天事情比较多,溜了溜了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值