C++11实现:查找不降序列中大于给定值的元素个数 - 优化运行时间
"C++11实现:查找不降序列中大于给定值的元素个数 - 优化运行时间"\n"给定一个长度为n的不降正整数序列,并进行m次询问,每次询问给定一个整数,要求找出序列中大于该整数的数的个数。本文使用C++11实现高效算法,并对代码进行优化,使其运行时间最短。"\n"\n"输入格式"\n"一共三行"\n"第一行包含两个整数n, m"\n"第二行包含n个正整数,, 保证"\n"第三行包含m个正整数,"\n"\n"输出格式"\n"一共m行"\n"第i行包含一个整数,表示序列中大于的数的个数"\n"\n"样例"\n"输入样例"\n"\n"4 3"\n"1 1 2 4"\n"1 3 5"\n"输出样例"\n"\n"2"\n"1"\n"0"\n"\n"c++11实现"\n"使运行时间最短内容:"\n"c++\n#include \"iostream\"\n#include \"vector\"\n#include \"algorithm\"\n\nusing namespace std;\n\nint main() {\n int n, m;\n cin >> n >> m;\n vector<int> nums(n);\n for (int i = 0; i < n; i++) {\n cin >> nums[i];\n }\n sort(nums.begin(), nums.end());\n for (int i = 0; i < m; i++) {\n int target;\n cin >> target;\n int count = 0;\n int left = 0, right = n - 1;\n while (left <= right) {\n int mid = (left + right) / 2;\n if (nums[mid] > target) {\n count = n - mid;\n right = mid - 1;\n } else {\n left = mid + 1;\n }\n }\n cout << count << endl;\n }\n return 0;\n}\n"\n
原文地址: https://www.cveoy.top/t/topic/ppj1 著作权归作者所有。请勿转载和采集!