zoukankan      html  css  js  c++  java
  • 浙江大学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
    ");
    		return 0;
    	}
    
    	vector<int>::iterator N =vec.begin()+( vec.size()-K);
    
    	left = vec.begin();
    	right = vec.end()-1;
    
    	if (left==right)
    	{
    		printf("%d
    ",*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
    ",*mid);
    		  flag = false;
    		  break;
    	  }
    		if (mid>N)
    		right = mid-1;
    		else
    		if (mid<N)
    		left =  mid+1;
    	}
    	if (flag)
    	printf("NULL
    ");
    
    	
    
    
    	//system("pause");
    
    	return 0;
    }


     

     

     

     

  • 相关阅读:
    Vue请求参数转换(qs的使用---对象序列化)
    Vue中使用async/await解决异步请求问题
    数据结构:set
    数据结构:map (不是数组的map方法)
    数组方法-reduce 和 ES6扩展运算符
    数据分析相关
    Hadoop委任和解除节点
    Oozie调度Sqoop报错
    Oozie调度Sqoop的两种方式
    MySql数据表直接到Hive表操作
  • 原文地址:https://www.cnblogs.com/ainima/p/6331244.html
Copyright © 2011-2022 走看看