分治应用--万里挑一 找假硬币

文章目录

    • 1. 问题描述
    • 2. 解题思路
    • 3. 代码实现

1. 问题描述

n 个硬币中有1枚是假币,真假币唯一的区别是假币重量轻,如何快速找出假币

2. 解题思路

  • 暴力做法,一个一个的称重,O(n)复杂度
  • 分治思路
  1. 将硬币等分成两份,若为奇数,多出一枚,放在天平两边
  2. 轻的一边包含假币,若相等,则假币是多出的那一枚
  3. 对轻的一边继续上述操作,直到找出假币
    复杂度O(log n)

3. 代码实现

/*** @description: n 个硬币中有1枚是假币,假币重量轻,如何快速找出假币* @author: michael ming* @date: 2019/7/6 20:37* @modified by: */
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
int findcoin(int *weight, int left, int right, int &weightimes)
{if(left+1 == right)//只有2枚硬币{weightimes++;//称重比较一次if(weight[left] < weight[right])return left;//返回重量小的位置elsereturn right;}int i, mid, weightsumL, weightsumR;weightsumL = weightsumR = 0;mid = left + (right-left)/2;if((right-left+1)%2 == 0)//偶数枚银币{weightimes++;for(i = left; i <= mid; ++i)weightsumL += weight[i];//计算左边重量(计算机没有天平,只能一个个加)for(i = mid+1; i <= right; ++i)weightsumR += weight[i];//右边重量if(weightsumL > weightsumR)//左边重,假币在右边return findcoin(weight,mid+1,right,weightimes);else if(weightsumL < weightsumR)//假币在左边return findcoin(weight,left,mid,weightimes);else//假币不在两边(偶数枚银币);//什么都不做,不必再找了}else//奇数枚硬币{weightimes++;for(i = left; i <= mid-1; ++i)weightsumL += weight[i];//计算左边重量for(i = mid+1; i <= right; ++i)weightsumR += weight[i];//右边重量if(weightsumL > weightsumR)//左边重,假币在右边return findcoin(weight,mid+1,right,weightimes);else if(weightsumL < weightsumR)//假币在左边return findcoin(weight,left,mid-1,weightimes);else//两边相等(奇数枚硬币),剩余的那个是假币return mid;}
}
int main()
{srand(unsigned(time(0)));int num, i, weightimes = 0;cout << "请输入硬币总个数:";cin >> num;const int coinNum = num;int *weight = new int [coinNum];for(i = 0; i < coinNum; ++i){weight[i] = 10;}i = rand()%num;weight[i] = 9;  //随机生成假币for(i = 0; i < coinNum; ++i)//打印硬币信息{cout << i + 1 << " 硬币重量: " << weight[i] << endl;}cout << "假硬币是第" << findcoin(weight,0,coinNum-1,weightimes)+1 << "个。" << endl;cout << "共称了" << weightimes << "次,找到假币。";delete[]weight;return 0;
}

输入 2500枚、5001枚,100万枚,最多需要 log2n 向上取整次就能找到。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java多线程与并发系列从0到1全部合集,强烈建议收藏!

在过去的时间中&#xff0c;我写过Java多线程与并发的整个系列。 为了方便大家的阅读&#xff0c;也为了让知识更系统化&#xff0c;这里我单独把Java多线程与并发的整个系列一并罗列于此&#xff0c;希望对有用的人有用&#xff0c;也希望能帮助到更多的人。 以下为整个目录&a…

论文浅尝 | 基于图注意力的常识对话生成

OpenKG 祝各位读者新春快乐&#xff0c;猪年吉祥&#xff01;来源&#xff1a;IJCAI 2018.论文下载地址&#xff1a;https://www.ijcai.org/proceedings/2018/0643.pdf项目源码地址&#xff1a;https://github.com/tuxchow/ccm动机在以前的工作中&#xff0c;对话生成的信息源是…

Facebook、阿里等大佬现身说法,NLP是否被高估了?

NLP (自然语言处理)&#xff0c;利用计算机对人类的语言文字进行处理。由于语言文字是人类交流沟通的最基本方式&#xff0c;因此 NLP 也是最典型的 AI 领域之一。NLP 被誉为“人工智能皇冠上的明珠”。这话也许没错&#xff0c;但听起来难免空洞。所以我去实际问了3位从事 NLP…

玩转算法面试-第二章

1 时间复杂度分析 正常处理的数据规模&#xff0c;为了保险起见&#xff0c;可将将上面的数在除以10&#xff0c;防止电脑假死。 空间复杂度分析&#xff1a; 注意问题&#xff1a;递归调用是有空间代价的 3 常见的复杂度分析 翻转的代码&#xff1a; 选择排序的方法&a…

论文笔记(Attentive Recurrent Social Recommendation)

注意力循环社交推荐 原文链接&#xff1a;Attentive Recurrent Social Recommendation, SIGIR’18 原理&#xff1a;将用户的朋友和历史交互项按时间划分&#xff0c;用注意力机制整合各个时段的朋友影响和交互项影响后输入LSTM来学习动态用户向量&#xff0c;动态用户向量与动…

回溯算法(Backtracking Algorithm)之八皇后问题

文章目录1. 回溯算法思想2. 算法应用2.1 八皇后问题1. 回溯算法思想 前面讲过贪心算法并不能保证得到最优解&#xff0c;那怎么得到最优解呢&#xff1f; 回溯思想&#xff0c;有点类似枚举搜索。枚举所有的解&#xff0c;找到满足期望的解。为了有规律地枚举所有可能的解&am…

最全Java锁详解:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁

在Java并发场景中&#xff0c;会涉及到各种各样的锁&#xff0c;比如&#xff1a;高并发编程系列&#xff1a;4种常用Java线程锁的特点&#xff0c;性能比较、使用场景&#xff0c;这些锁有对应的种类&#xff1a;公平锁&#xff0c;乐观锁&#xff0c;悲观锁等等&#xff0c;这…

论文浅尝 | Generative QA: Learning to Answer the Whole Question

链接: https://openreview.net/forum?idBkx0RjA9tX传统的机器阅读理解的模型都是给定 context 和 question, 找出最有可能回答该 question 的 answer&#xff0c;用概率表示为 p(a|q,c)&#xff0c;这其实是一个判别模型。判别模型在大多数任务上可以取得比生成模型更好的准确…

打破BERT天花板:11种花式炼丹术刷爆NLP分类SOTA!

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | JayLou娄杰编 | 小轶在2020这个时间节点&#xff0c;对于NLP分类任务&#xff0c;我们的关注重点早已不再是如何构造模型、拘泥于分类模型长什么样子了。如同CV领域当前的重点一样&#xff0c;我们更应该…

论文笔记(A Neural Influence Diffusion Model for Social Recommendation)

神经影响传播模型为了社交推荐 原文链接&#xff1a;A Neural Influence Diffusion Model for Social Recommendation, SIGIR’19 原理&#xff1a;社交网络上应用GNN提取朋友对用户的影响候选项对用户历史交互项的注意力影响用户向量&#xff0c;用户向量和项向量的内积预测评…

玩转算法面试-第三章

数组中常见的问题 排序&#xff1a; 选择排序&#xff1b;插入排序&#xff1b;归并排序&#xff1b;快速排序 查找&#xff1a;二分查找法 数据结构&#xff1a;栈&#xff1b;队列&#xff1b;堆 … 二分查找法&#xff1a; 1964年提出&#xff0c;没有bug的二分查找法是在1…

回溯应用-- 0-1背包问题

文章目录1. 问题描述2. 回溯解决思路1. 问题描述 0-1背包非常经典&#xff0c;很多场景都可以抽象成这个问题。经典解法是动态规划&#xff0c;回溯简单但没有那么高效。 有一个背包&#xff0c;背包总的承载重量是 W kg。现有n个物品&#xff0c;每个物品重量不等&#xff0…

Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现

为什么需要线程池 我们有两种常见的创建线程的方法&#xff0c;一种是继承Thread类&#xff0c;一种是实现Runnable的接口&#xff0c;Thread类其实也是实现了Runnable接口。但是我们创建这两种线程在运行结束后都会被虚拟机销毁&#xff0c;如果线程数量多的话&#xff0c;频繁…

论文浅尝 | 面向单关系事实问题的中文问答模型

来源&#xff1a;NLPCC 2017论文下载地址&#xff1a;http://tcci.ccf.org.cn/conference/2017/papers/2003.pdf动机开放领域的QA问题是一个被广泛研究的问题&#xff0c;而且目前这个问题并没有被很好地解决。在中文领域&#xff0c;相关的数据集并不多。而NLPCC开放了一个KBQ…

玩转算法值面试-第五章 -在链表中穿针引线

5-123 数组中可以随机访问&#xff0c;相反链表就不行 leetcode&#xff1a;206 反转一个链表&#xff0c;链表如果没有特别声明&#xff0c;则节点的值不发生改变 一共需要三个指针&#xff1a;current指向当前需要处理的指针 next指向当前需要处理的元素的下一个元素的指针…

论文笔记(SocialGCN: An Efficient Graph Convolutional Network based Model for Social Recommendation)

一个有效的基于图卷积神经网络的社交推荐模型 原文链接&#xff1a;SocialGCN: An Efficient Graph Convolutional Network based Model for Social Recommendation, arxiv 原理&#xff1a;在用户-项交互图上应用GNN来学习用户向量的表示&#xff0c;用户向量和项向量内积预测…

POJ 1753 Flip Game(回溯)

文章目录1. 题目1.1 题目链接1.2 题目大意1.3 解题思路2. 代码2.1 Wrong Answer代码2.2 Accepted代码1. 题目 1.1 题目链接 http://poj.org/problem?id1753 1.2 题目大意 一个黑白棋子的棋盘&#xff0c;一个反过来周围四个也跟着反过来(如果存在的话)&#xff0c;颜色取反…

他读书时挣了五十万,找工作时收获阿里腾讯快手等ssp offer

今天介绍一位dalao&#xff0c;他之前在中科院获取了计算机硕士学位&#xff0c;现在是一名大厂的算法工程师。大多数人的学生生活&#xff0c;是在枯燥的课程和任务中度过的&#xff0c;但他却有所不同&#xff0c;乐于折腾&#xff0c;收获了不一样的精彩。他喜欢去公司实习&…

Java多线程系列(三):Java线程池的使用方式,及核心运行原理

之前谈过多线程相关的4种常用Java线程锁的特点&#xff0c;性能比较、使用场景&#xff0c;今天主要分享线程池相关的内容&#xff0c;这些都是属于Java面试的必考点。 为什么需要线程池 java中为了提高并发度&#xff0c;可以使用多线程共同执行,但是如果有大量线程短时间之内…

论文浅尝 | 图神经网络综述:方法及应用

论文链接&#xff1a;https://arxiv.org/pdf/1812.08434.pdfGNN相关论文列表链接&#xff1a;https://github.com/thunlp/GNNPapers近日&#xff0c;清华刘知远老师组在arXiv上发表了一篇关于图神经网络的综述&#xff0c;本次论文浅尝在分享这篇论文的基础上&#xff0c;对图神…