题解 | #合并表记录#

合并表记录

https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201

#include <stdio.h>

typedef struct HashTable
{
    int index;
    int value;
}HashTable;
HashTable hashTable[500]={0};

int FindHashTableByIndex(int index);
void InitHashTable();
void SortHashTableByIndex(int length);

int main() {
    int n, ids, val, new_id=0;
    /* 初始化哈希表 */
    InitHashTable();
    /* 哈希表新增数据 */
    scanf("%d", &n);
    for(int i=0;i<n;i++)
    {
        scanf("%d", &ids);
        scanf("%d", &val);
        int res = FindHashTableByIndex(ids);
        if(res>=0)
        {
            hashTable[res].value += val;
        }
        else 
        {
            hashTable[new_id].index   =  ids;
            hashTable[new_id++].value += val; 
        }
    }
    /* 哈希表排序 */
    SortHashTableByIndex(new_id);
    /* 哈希表打印 */
    for(int i=0;i<new_id;i++)
    {
        printf("%d ", hashTable[i].index);
        printf("%d\n", hashTable[i].value);
    }
    return 0;
}

int FindHashTableByIndex(int index)
{
    int i=0;
    while((hashTable[i].index != index) && i<500)
    {
        i++;
    }
    if(i<500)
        return i;
    else
        return -1;
}

void InitHashTable()
{
    for(int i=0;i<500;i++)
    {
        hashTable[i].index = -1;
        hashTable[i].value = 0;
    }
}

void SortHashTableByIndex(int length)
{
    int flag = 0;
    for(int i=0;i<length-1;i++)
    {
        flag = 0;
        for(int j=0;j<length-i-1;j++)
        {
            if(hashTable[j].index > hashTable[j+1].index)
            {
                HashTable temp = hashTable[j];
                hashTable[j] = hashTable[j+1];
                hashTable[j+1] = temp;
                flag = 1;
            }
        }
        if(!flag) 
            break;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务