• 浙江大学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;
    }


     

  • 相关阅读:
    总结php删除html标签和标签内的内容的方法
    php正则验证手机、邮箱
    php正则匹配到字符串里面的a标签
    PHP 使用try catch,捕获异常
    Apache漏洞利用与安全加固实例分析
    php json接口demo
    PHP 把MYSQL重复ID 二维数组重组为三维数组
    文件扩展关联命令(assoc)
    修改文件属性(attrib)
    文件比较命令(fc)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3297238.html
Copyright © 2020-2023  润新知