1048. Find Coins (25)

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;
}


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
#include <iostream>#include <cstdlib>using namespace std;struct Coin { int weight; // 硬币的重量 bool is_fake; // 是否为假币};Coin coins[100];// 将硬币分成两等份并比较的功能,返回较轻的那一半硬币的重量总和int balance(int start, int end) { int sum = 0; for (int i = start; i <= end; i++) { sum += coins[i].weight; } return sum;}int find_fake_coin(int start, int end) { int len = end - start + 1; if (len == 2) { // 只剩下两个硬币 if (coins[start].weight < coins[end].weight) { return start; } else { return end; } } else if (len == 3) { // 只剩下三个硬币 int index = rand() % 3 + start; if (index == start) { // 取出第一枚硬币作为样本 if (coins[start + 1].weight == coins[start + 2].weight) { return start; } else if (coins[start + 1].weight < coins[start + 2].weight) { return start + 1; } else { return start + 2; } } else if (index == start + 1) { // 取出第二枚硬币作为样本 if (coins[start].weight == coins[start + 2].weight) { return start + 1; } else if (coins[start].weight < coins[start + 2].weight) { return start; } else { return start + 2; } } else { // 取出第三枚硬币作为样本 if (coins[start].weight == coins[start + 1].weight) { return start + 2; } else if (coins[start].weight < coins[start + 1].weight) { return start; } else { return start + 1; } } } else { // 将硬币分成两等份并比较 int mid = (start + end) / 2; int left_sum = balance(start, mid); int right_sum = balance(mid + 1, end); if (left_sum < right_sum) { return find_fake_coin(start, mid); } else if (left_sum > right_sum) { return find_fake_coin(mid + 1, end); } else { return -1; // 不可能出现的情况 } }}int main() { int n; cout << "请输入硬币的数量n:"; cin >> n; srand(time(NULL)); int fake_index = rand() % n; // 随机生成假币的位置 for (int i = 0; i < n; i++) { coins[i].weight = 10; // 正常硬币的重量为10g if (i == fake_index) { coins[i].weight = 8; // 假币的重量为8g coins[i].is_fake = true; } else { coins[i].is_fake = false; } } int fake = find_fake_coin(0, n - 1); cout << "假币的位置是:" << fake << endl; return 0;}求此算法的运行结果和算法时间复杂度
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值