算法之买帽子(求第三便宜的帽子价格)
2017-07-26 16:36
295 查看
原题
度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?
[b]输入描述:[/b]
首先输入一个正整数N(N <= 50),接下来输入N个数表示每顶帽子的价格(价格均是正整数,且小于等于1000)
[b]输出描述:[/b]
如果存在第三便宜的帽子,请输出这个价格是多少,否则输出-1
[b]测试用例:[/b]
10
10 10 10 10 20 20 30 30 40 40
[b]输出结果:[/b]
30
题解
[b]解题思想:[/b]采用最大堆的思想,用数组模拟一个元素个数为3的最大堆并赋初始值(初始值须大于题中要求的临界值),堆顶元素(即数组的第一个元素)永远保持为堆中最大,每插入一个元素,首先判断是否跟堆中元素相同,再判断是否比堆顶元素小,若无重复且小于堆顶元素,用其将堆顶元素覆盖,再调用堆调整算法。循环结束后,若数组第一个元素仍为初始值,则输出-1,反之输出数组第一个元素。该时间复杂度为O(N)。类似问题有:top k问题
[b]代码:[/b]
#include <stdio.h> void compare(int result[]){ if(result[1]>result[0]){ result[1]=result[1]^result[0]; result[0]=result[1]^result[0]; result[1]=result[1]^result[0]; } if(result[2]>result[0]){ result[2]=result[2]^result[0]; result[0]=result[2]^result[0]; result[2]=result[2]^result[0]; } } int main(){ int N; int price; int result[3]={1001,1001,1001}; int i; scanf("%d",&N); for(i=0;i<N;i++){ scanf("%d",&price); if(price!=result[0]&&price!=result[1]&&price!=result[2]&&price<result[0]){ result[0]=price; compare(result); } } if(result[0]==1001){ result[0]=-1; } printf("%d",result[0]); }
相关文章推荐
- 百度面试题--度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同,度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?
- 度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?
- 度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?
- 筛选int类型数组重复值取指定位置的数案例输入好多帽子的价格 ,想买第三便宜的帽子,输出该帽子的价格
- 2017百度实习生春招java笔试题 输出第三便宜价格
- 求第三便宜的帽子
- 百度:度度熊想去商场买一顶帽子,买第三便宜的帽子
- 韩国推出自有操作系统 价格比微软便宜一半
- 吴昊品游戏核心算法 Round 16 ——吴昊教你玩口袋妖怪 第三弹 地洞谜题
- 【算法】帽子问题
- 经典算法题——第三题 猴子吃桃
- 经典算法题每日演练——第三题 猴子吃桃
- 数据结构教程 第三课 算法及算法设计要求
- Cycle的超级云计算服务价格便宜量又足
- 第三课:程序的灵魂-算法
- JavaSE基础第三部分:Java数组和算法之算法
- 『LeetCode』练习第三弹_算法5题
- 为什么我们短信平台价格比三大运营商便宜
- 百度2017年暑假实习生编程题目(第三题)---3、进程调度算法 短作业优先(SJF, Shortest Job First)又称为“短进程优先
- 【java-算法】【百度真题】度度熊去商场买一顶帽子问题