浙江大学PAT上机题解析之3-05. 求链式线性表的倒数第K项
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式说明:
输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式说明:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息“NULL”。
样例输入与输出:
| 序号 | 输入 | 输出 |
| 1 |
4 1 2 3 4 5 6 7 8 9 0 -1 |
7 |
| 2 |
6 3 6 7 8 2 -2 |
NULL |
//注意,这一题,题目很简单,但是可能数据量会很大,如果不用二分来搜索肯定会超时,还有一般遇到这种对时间要求比较高的题目最好使用stdio的输入输出流,比iostream快不少。
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
int K;
vector<int> vec;
vector<int>::iterator left,right,mid;
int temp=0;
bool flag = true;
scanf("%d",&K);
while(scanf("%d",&temp),temp>=0)
vec.push_back(temp);
if (vec.empty()|| K>vec.size())
{
printf("NULL\n");
return 0;
} vector<int>::iterator N =vec.begin()+( vec.size()-K); left = vec.begin();
right = vec.end()-1; if (left==right)
{
printf("%d\n",*left);
return 0;
} while(left<=right &&left>=vec.begin()&&left<vec.end()&&right>=vec.begin()&&right<vec.end())
{
mid = left + (right-left)/2; if (mid==N)
{
printf("%d\n",*mid);
flag = false;
break;
}
if (mid>N)
right = mid-1;
else
if (mid<N)
left = mid+1;
}
if (flag)
printf("NULL\n"); //system("pause"); return 0;
}
浙江大学PAT上机题解析之3-05. 求链式线性表的倒数第K项的更多相关文章
- 浙江大学PAT上机题解析之1014. 福尔摩斯的约会 (20)
1014. 福尔摩斯的约会 (20) 时间限制 50 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Y ...
- 浙江大学PAT上机题解析之1015. 德才论 (25)
宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人 ...
- 浙江大学PAT上机题解析之5-05. QQ帐户的申请与登陆
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式说明: 输入首先给出一个正整数N(<=105),随后给出N行指令.每行指令的格式为:“命令符 ...
- 浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3. 输入格式说明: 输入分2行,分别在每行给出由若干个正整数构成的非降序序列,用-1表示序列的结尾(-1不属于这个序列) ...
- 浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分 ...
- 浙江大学PAT上机题解析之2-06. 数列求和
给定某数字A(1<=A<=9)以及非负整数N(0<=N<=100000),求数列之和S = A + AA + AAA + … + AA…A(N个A).例如A=1, N=3时,S ...
- PAT甲题题解-1029. Median (25)-求两序列的中位数,题目更新了之后不水了
这个是原先AC的代码,但是目前最后一个样例会超内存,也就是开不了两个数组来保存两个序列了,意味着我们只能开一个数组来存,这就需要利用到两个数组都有序的性质了. #include <iostrea ...
- c++刷题(27/100)反转单项链表,链表的倒数第k个
题目1:调整数组顺序使奇数位于偶数前面 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位 ...
- ocp 1Z0-051 23-70题解析
23. Examine thestructure proposed for the TRANSACTIONS table: name Null Type TRANS_ID NOT NULLNUMBER ...
随机推荐
- html 5 废弃的标签和属性
第一类:表现性元素 basefont big center font s strike tt u 建议用语义正确的元素代替他们,并使用CSS来确保渲染后的效果 第二类:框架类元素 因框架有很多可用性及 ...
- mysql 表及其列字符集设置
--修改表的字符集 alter table rtb_media_daily_report character set gbk; --查询表列字符集 show full columns from rtb ...
- Android 开发笔记 “Android 的消息队列模型”
Android是参考Windows的消息循环机制来实现Android自身的消息循环的. Android通过Looper.Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都 ...
- android自动化(appium)
目录 一.Appium环境搭建 1.下载nodejs,并安装 2.下载appium,并安装 3.安装python.安装pip.安装appium 4.安装java的jdk 5.安装andriod的sdk ...
- 设计模式总结5--命令模式 commend pattern
命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象.就像我们去餐厅,点菜是找服务员,然后服务员去让厨师做菜而不是我们直接找厨师做菜 public interface Commend { ...
- vc 获取网页内容(HTTP)
BOOL bResult = FALSE; // 初始化WinInet 环境 HINTERNET hInternet = InternetOpen("CEHTTP", ...
- Ceph之数据分布:CRUSH算法与一致性Hash
转自于:http://www.cnblogs.com/shanno/p/3958298.html?utm_source=tuicool 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以 ...
- 代码中函数、变量、常量 / bss段、data段、text段 /sct文件、.map文件的关系[实例分析arm代码(mdk)]
函数代码://demo.c #include<stdio.h> #include<stdlib.h> , global2 = , global3 = ; void functi ...
- ThinkPHP-3.2.3学习
一.下载安装 核心包:不用解释,最减版本 完整包:包括扩展功能(验证码.session等) 二.调试 ----www ---thinkphp_3 Application ...
- 初识Channel
java.nio.channels 中的接口和类. A channel represents an open connection to an entity such as a hardware de ...