南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数
问题1
用来测试的,就不说了
问题2:中位数附近2k+1个数
给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及最接近 m 的大于等于 m 的 k 个数。将这 2k+1 个数按升序排序后输出。
中位数定义:如果数串的大小是偶数 2j,中位数是从小到大排列的第 j 个数;如果数串的大小是奇数 2j+1,中位数是从小到大排列的第 j+1 个数。
输入
第一行是 k 的值和数串的长度 n。
第二行是以空格隔开的 n 个整型数,最后一个数后面有空格。
输出
思路
这题如果直接排序再输出是会超时的,排序算法的复杂度为nlgn,后来按照快排的思想做通过了。
先以快排的思想找出中位数,复杂度为n(递归方程为T(n)=T(n/2)+n,用代入法就可以证明),(由于快排是随机选取一个数做标准,所以我们在排完一次后需要判断所选标准和中位数的差距,接着在子区间内继续寻找中位数,选取到中位数后返回,具体看searchmid函数,应该写得很简洁了)
按照快排的思想,我们已经将数组分为小于中位数的区间,中位数,大于中位数的区间。根据题目,所给的k很小,再根据选择排序的思想在左右两区间各选取k个数即可。
#include <iostream>
#include <vector>
#include <algorithm>
#include <limits.h>
using namespace std; //使用快速排序的思路,找出中间数,first和last为区间,pos为要寻找有序状态下的第几个数
int searchmid(vector<int>& v,int first, int last, int pos) {
int left = first;
int key = last;
for (int i = first; i <= last; ++i) {
if (v[i] < v[key]) {
swap(v[i], v[left]);
left++;
}
}
swap(v[left], v[key]);
if (left < pos)
return searchmid(v, left+, last, pos);
else if (left > pos)
return searchmid(v,first,left-,pos);
return left;
} int main()
{
int k,length;
cin >> k;
cin >> length;
vector<int> v(length,);
int pos = , num;
while (cin >> num) {
v[pos] = num;
pos++;
} /*int k = 0;
vector<int> v = {34, 10,9,8,7,6,5,4,3,2,1,0};
int length = v.size();*/ vector<int> result;
int index = searchmid(v, , length-, length/ - + length%);
//在数组前一部分寻找k个小于等于v[index]的数
for (int j = ; j < k; ++j) {
int max = INT_MIN;
int max_pos;
for (int i = ; i < index-j; ++i) {
if (v[i] > max) {
max = v[i];
max_pos = i;
}
}
swap(v[max_pos],v[index-j-]);
}
//在数组后一部分寻找k个大于等于v[index]的数
for (int j = ; j < k; ++j) {
int min = INT_MAX;
int min_pos;
for (int i = index + j + ; i < length; ++i) {
if (v[i] < min) {
min = v[i];
min_pos = i;
}
}
swap(v[min_pos],v[index+j+]);
}
for (int i = index - k; i <= index + k; i++) {
cout << v[i] ;
if (i != index + k)
cout << " ";
}
/*cout << endl; sort(v.begin(), v.end());
for (auto h : v)
cout << h << " ";
cout << endl; system("pause");*/
return ;
}
问题3:任意两数之和是否等于给定数
题目描述
输入
输出
思路
直接遍历判断,符合条件的直接输出就可以了。
int main()
{
int length;
int target;
cin >> length;
vector<int> v(length, );
for (int i = ; i < length; ++i)
cin >> v[i];
cin >> target; for (int i = ; i < length;++i) {
for (int j = i + ; j < length; j++) {
if (v[i] + v[j] == target) {
cout << v[i];
cout << " ";
cout << v[j];
cout << endl;
}
}
} //system("pause");
return ;
}
南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数的更多相关文章
- 南大算法设计与分析课程OJ答案代码(4)--变位词、三数之和
问题 A: 变位词 时间限制: 2 Sec 内存限制: 10 MB提交: 322 解决: 59提交 状态 算法问答 题目描述 请大家在做oj题之前,仔细阅读关于抄袭的说明http://www.bi ...
- 南大算法设计与分析课程OJ答案代码(3)
问题 A: 动态中位数问题 时间限制: 1 Sec 内存限制: 8 MB提交: 866 解决: 102提交 状态 算法问答 题目描述 输入一组整数a1, a2, …, an ,每输入一个整数,输出 ...
- 南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题
问题 A: 割点与桥 时间限制: 1 Sec 内存限制: 5 MB提交: 475 解决: 34提交 状态 算法问答 题目描述 给出一个无向连通图,找到所有的割点和桥 输入 第一行:点的个数,如果点 ...
- 南大算法设计与分析课程OJ答案代码(2)最大子序列和问题、所有的逆序对
问题 A: 最大子序列和问题 时间限制: 1 Sec 内存限制: 4 MB提交: 184 解决: 66提交 状态 算法问答 题目描述 给定一整数序列 a1, a2, …, an,求 a1~an 的 ...
- 南大算法设计与分析课程复习笔记(1) L1 - Model of computation
一.计算模型 1.1 定义: 我们在思考和处理算法的时候是机器无关.实现语言无关的.所有的算法运行在一种“抽象的机器”之上,这就是计算模型. 1.2 种类 图灵机是最有名的计算模型,本课使用更简单更合 ...
- 南大算法设计与分析课程复习笔记(4)L4 - QuickSort
一.快速排序 算法导论上关于快速排序有两种写法 第一种,从头到尾遍历,不断将小于基准元素的项移到前面.代码很简介,只需要维护一个交换位置,表示小于基准元素的末尾位置加一 我们看算法导论上的一个例子: ...
- 南大算法设计与分析课程复习笔记(3)L3 - Recursion
一.递归方程 按照分治的思想,可以将一个递归的复杂度写成递归方程 一.解递归方程--猜然后证明 该方法又称为代入法,步骤如下: 1.猜解的形式 2.数学归纳法证明正确 例子: 我们假设有如下递归式: ...
- 南大算法设计与分析课程复习笔记(2)L2 - Asymptotics
一.几种比较复杂度的符号 数据结构有描述,相关严格数学定义也不想说了,就这么过了吧. 二.最大子数组的几种解决方法 从最复杂的暴力解法过渡到最简单的动态规划 解析和代码见这里:http://www.c ...
- 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)
PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...
随机推荐
- struts2参数传递总结
需求1:登录页面填写表单,提交后进入action,action中能够获取填入的内容.[宏观分类:页面->action] 需求2:登录action从数据库校验完毕后,跳转至主页,主页显示当前登录的 ...
- prim算法和克鲁斯卡尔算法
Prim 设图G=(V,E)是一个具有n个顶点的连通网,其生成树的顶点集合为U.首先把v0放入U,再在所有的u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树,并把该边的v加入U集合 ...
- 交叉编译ffmpeg(hi3520d)
./configure \--prefix=/usr/local/ffmpeg-3520D \--cross-prefix=/opt/hisi-linux-nptl/arm-hisiv100-linu ...
- scrum冲刺
小组第一次冲刺任务及其完成情况描述: 这次主要是先构建一个框架,然后就是完成首页的一些代码编写,能够基本实现首页的注册.登陆以及一些之后完成的内部构建. 在第一次冲刺任务中的收获和体会,以后如何改进的 ...
- aji unorder_map
- win10 win7 环境下 oracle 11g和Plsql的安装、卸载遇到的问题。
* win7一体机在安装好oracle和PlSQL后,无法连接到orcl数据库,同时也忘记了sys设置的密码.(在这里应注意在安装过程中,应选择统一口令,这里我均设置成了orcl,同时也应该注意在最后 ...
- why microsoft named their cloud service Azure?
best guess I can personally make is that because Azure literally means “bright blue color of the clo ...
- mysql 取名会涉及到关键字 的问题
如 comment 如下图错误
- Javascript高级编程学习笔记(66)—— 事件(10)变动事件
变动事件 DOM2级的变动事件,能在DOM中的一部分发生变化时给出提示 变动事件是为XML或HTML DOM 设计的,并不特定于某种语言 DOM2级定义了如下变动事件: DOMSubtreeModif ...
- rem计算
//jquery实现 // $(function(){ // $(window).on("resize",function(){ // var width=$(window).wi ...