two_sum_testcode

来源:互联网 发布:qq游戏端口是多少 编辑:程序博客网 时间:2024/04/30 16:55
#include <stdlib.h>
#include <stdio.h>

typedef struct node{
    struct node* next;
    int data;
    int arry_i;
}node_t;

void insert_list_head(int data,int i,node_t **head_addr){
    node_t *p=(node_t*)malloc(sizeof(node_t));
    if(*head_addr==NULL)
    {
        p->next=NULL;
    }
    else
    {
        p->next=*head_addr;
    }
    p->data=data;
    p->arry_i=i;
    *head_addr=p;
}


void creat_hash_tab(int A[10],node_t* hash_arr[4],int hash_key){
    int hash_index,i,n;
    for(i=0;i<4;i++)
    {
        hash_arr[i]=NULL;
    }
    for(n=0;n<10;n++)
    {
        if(A[n]<hash_key)
        {
            insert_list_head(A[n],n,&hash_arr[0]);
        }
        else
        {
            hash_index=(A[n]%hash_key)+1;
            insert_list_head(A[n],n,&hash_arr[hash_index]);
        }
    }

}

/******************************************
void display_hash_tab(node_t* hash_arr[])
{
    int i;
    for(i=0;i<4;i++)
{
    node_t* p=hash_arr[i];
    printf("line %d--->",i);
    while(p!=NULL)
    {
        printf("%d->",p->data);
        p=p->next;
    }
    printf("null\n");
}
}
******************************************/

node_t* search_list(node_t* hash_arry[],int hash_arry_index,int search_val,node_t* search_start){
    node_t* p=search_start;
    if(p!=NULL)
    {
        while(p!=NULL){
            if(p->data==search_val)
            {
                return p;
            }
            else
            {
                p=p->next;
            }
        }
    }
    else{
        p=hash_arry[hash_arry_index];
        while(p!=NULL){
            if(p->data==search_val)
            {
                return p;
            }
            else
            {
                p=p->next;
            }
        }
    }
    return NULL;
}

int* twoSum(node_t* nums[], int numsSize, int target){
    int result[numsSize];
    node_t* ret=NULL;
    node_t* p;
    int *p_1;
    int hash_index,i,target_rest;
    for(i=0;i<4;i++)
    {
        p=nums[i];
        while(p!=NULL){
            target_rest=target-p->data;
            if(target_rest<3){
                hash_index=0;
            }
            else{
                hash_index=(target_rest%3)+1;
            }
            if(hash_index==i){
                ret=search_list(nums,hash_index,target_rest,p->next);
            }
            else{
               ret=search_list(nums,hash_index,target_rest,NULL);
            }
            if(ret!=NULL){
                result[0]=p->arry_i;
                result[1]=ret->arry_i;
                p_1=result;
                return p_1;
            }
            p=p->next;
        }

    }
    return NULL;
}

void main(){
    int A[10]={1,2,3,4,5,6,7,8,9,11};
    node_t* hash_arr[4];
    creat_hash_tab(A,hash_arr,3);
//    display_hash_tab(hash_arr);
    int*ret;
    ret=twoSum(hash_arr, 2, 9);
    printf("[%d,%d]\n",ret[0],ret[1]);
}

===========================================

[root@test1 ~]# gcc -g hash.c -o hash
[root@test1 ~]# ./hash
[1,6]


0 0
原创粉丝点击