zoukankan      html  css  js  c++  java
  • twoSum

    C方法(用hash)

     1 typedef struct HashNode
     2 {
     3    int key;
     4    int val;
     5 }HashNode;
     6 
     7 typedef struct HashMap
     8 {
     9   int size;
    10   HashNode** storage;
    11 }HashMap;
    12 
    13 HashMap* hash_create(int size)
    14 {
    15     HashMap* hashMap = malloc(sizeof(HashMap));// malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 
    16     hashMap->size = size;
    17     hashMap->storage= calloc(size, sizeof(HashNode*));// (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。
    18     //主要的不同是malloc不初始化分配的内存,已分配的内存中可以是任意的值. calloc 初始化已分配的内存为0。次要的不同是calloc返回的是一个数组,而malloc返回的是一个对象。
    19     return hashMap;
    20 }
    21 
    22 HashMap*hash_get(HashMap *hashMap, int key)
    23 {
    24     int hash= abs(key)% hashMap->size;
    25     HashNode* node;
    26     while((node=hashMap->storage[hash]))
    27     {
    28         if(node->key==key)
    29         {return node;}
    30         if(hash<hashMap->size-1)
    31         {hash++;}
    32         else{hash =0;}
    33     }
    34     return NULL;
    35 }
    36 
    37 void hash_set(HashMap *hashMap, int key, int value)
    38 {
    39     int hash=abs(key)%hashMap->size;
    40     HashNode*node;
    41     while((node=hashMap->storage[hash]))
    42     {
    43         if(hash<hashMap->size-1)hash++;
    44         else hash=0;
    45     }
    46     node =malloc(sizeof(HashNode));
    47     node->key=key;
    48     node->val=value;
    49     hashMap->storage[hash]=node;
    50 }
    51 
    52 void hash_destroy(HashMap* hashMap)
    53 {
    54  for(int i;i<hashMap->size;i++)
    55  {
    56      HashNode *node;
    57      if((node=hashMap->storage[i]))
    58      {free(node);}
    59  }
    60  free(hashMap->storage);
    61  free(hashMap);
    62 }
    63 
    64 int* twoSum(int* nums, int numsSize, int target){
    65 HashMap* hashMap;
    66 HashNode* node;
    67 int rest,i;
    68 hashMap = hash_create(numsSize * 2);
    69 for(i=0;i<numsSize;i++)
    70 {
    71     rest=target-nums[i];
    72     node=hash_get(hashMap,rest);
    73     if(node)
    74     {
    75         int *result =malloc(sizeof(int)*2);
    76         result[0]=node->val+1;
    77         result[1]=i+1;
    78         hash_destroy(hashMap);
    79         return result;
    80     }
    81     else 
    82         hash_set(hashMap,nums[i],i);
    83 }
    84 }
    twoSum
  • 相关阅读:
    List集合
    ArrayList_toArray
    Collection集合基础知识
    Array类的使用
    16.10
    16.9
    16.8
    16.7
    16.6
    16.5
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/4779885.html
Copyright © 2011-2022 走看看