关闭

leetcode 3sum c语言

563人阅读 评论(0) 收藏 举报
分类:

c语言版本我只是写出了输出版本,由于对c的二维指针内存分配不是很清楚,所以没有按照题目上规定定义函数。

如果有人看到能帮我修改一下最好了,欢迎留言。

思路:

1,先按照由小到大把数组排序

2,循环取第i位,数值a[i],  后面剩余的由旁边向中间扫描,看是否符合 a[m]+a[n] == -a[i],如果a[m]+a[n]>-a[i],则向右边移动m,如果小于则向左边移动n 

/*************************************************************************
    > File Name: leetcode8.c
    > Author: wayne
    > Mail: @163.com 
    > Created Time: 2015年07月09日 星期四 15时52分33秒
    3sum
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>

void swap(int *x, int *y)
{
    int tmp;
    tmp = *x;
    *x = *y;
    *y = tmp;

}

void print_array(int a[], int n)
{
    int i;
    for(i =0 ; i<n ;i++)
    {
        printf("%d  ", a[i]);
    }
}


void shell_sort(int a[],int len)
{
    int inc, i,j, tmp;
    for(inc = len/2; inc>0; inc /= 2)
    {
        for(i=inc;i<len;i++)
        {
            tmp = a[i];
            for(j=i;j>=inc; j-=inc)
            {
                if(tmp<a[j-inc])
                    a[j] = a[j-inc];
                else
                    break;
            }
            a[j] = tmp;
        }
    }


}



void threesum(int* nums, int numsize, int *returnsize)
{
    int i,j,a, m,n ,b,c;
    int t =0;
    for(i=0; i<numsize; i++)
    {
        a = nums[i];
        m = i+1;
        n = numsize -1;
        while(m<n && m>=0 && n>=0)
        {
           b = nums[m];
           c = nums[n];
            if(b+c > -a)
            {
                n--;
            }
            else if(b+c < -a)
            {
                m--;
            }
            else
            {
                printf("-- %d  %d  %d",i, m,n);
                printf("\n");
                printf("*** %d  %d  %d",nums[i], nums[m], nums[n]);
                m--;
                n--;
                printf("\n");
                t++;
                //break;
            }
        }

    }
}

 
int main()
{
    int a[] = {-1, 0, 1, 2, -1, -4};
    int numsize = sizeof(a)/sizeof(int);
    int returnsize = 3;
    shell_sort(a, numsize);
    print_array(a, numsize);
    printf("\n");
    threesum(a, numsize, &returnsize);
    printf("\n");
    return 0;
}
算法复杂度为o(n2)

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:75849次
    • 积分:1843
    • 等级:
    • 排名:千里之外
    • 原创:108篇
    • 转载:14篇
    • 译文:2篇
    • 评论:8条
    最新评论