1048. Find Coins (25)

本文介绍了一种利用哈希表优化Coin Sum Problem的方法,通过查找已遍历的数据来减少时间复杂度,实现O(n)的时间效率。具体步骤包括初始化哈希表和遍历硬币数组,同时计算目标值与当前硬币之差是否存在,以此来寻找解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.和leetcode的two sum一样

2.采用哈希表记录已经遍历过的数据,target=pay-num[i],查找num[target]是否在哈希表中有,如果有,则压进ans容器,最后进行排序输出;

3.时间复杂度为o(n)


AC代码如下:

#include <iostream>
#include <stdio.h>
#include <vector>
#include <stack>
#include <algorithm>
#include <memory.h>
#include <map>
#include <set>
#include "limits.h"
using namespace std;
/*
 8 15 
 1 2 8 7 2 4 11 15
 
 
 7 14
 1 8 7 2 4 11 15
 */
bool cmp(const pair<int,int>&a,const pair<int,int>&b)
{
    return a.first<b.first;
}

int main(void)
{
    int coinSum,pay;
    scanf("%d %d",&coinSum,&pay);
    int *coin=new int[coinSum];
    int target;
    int *haveCoin=new int[501];
    memset(haveCoin, 0, sizeof(haveCoin));
    vector<pair<int,int>> ans(0);
    for(int i=0;i<coinSum;i++)
    {
        scanf("%d",&coin[i]);
        target=pay-coin[i];
        if(target>=0&&target<=500&&haveCoin[target]>0)
        {
            int a=min(coin[i],target);
            int b=pay-a;
            ans.push_back({a,b});
        }
        haveCoin[coin[i]]++;
    }
    sort(ans.begin(),ans.end(),cmp);
    if(ans.size()>0)
        printf("%d %d\n",ans[0].first,ans[0].second);
    else
        printf("No Solution\n");
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值