[mock]12月27日
一开始介绍项目,最后的反馈是,还是说得不清楚,需要再准备准备。
然后两道题,第一题是有个数组,有2*n个数字,从1~n。比如n=3的数组,{1,2,2,3,1,3}。然后两两相同的数字删除,每次删除得到这两个数字的距离作为分数,最后得到分数的和,求能得到最大的分数。比如这里先消除1,然后2,3,这样分数是3+0+0,为0。
那么首先判断出brute force的复杂度太高。之后就贪心,虽然暂时无法证明它是对的,但感觉是对的,还是继续做了(贪心是对的,其实每次把有包含关系的先取外层再取里层就行了)。
那么n次遍历,每次得到距离最大的数字对,然后mark为-1表示删除了。但是当时觉得得到距离最大的数字对也要n^2。(最后知道O(n)就行了,一遍扫用O(n)空间记录每个数的位置并计算距离,再一遍扫得到最大数字对就行了。)
第二题是螺母和螺帽配对,就是两组,一组螺母,一组螺帽,他们可以组成大小互不相等的n对,螺母和螺帽可以比较大小,但螺母和螺帽两组内部无法比较,找出算法,把他们都配对。
当时想法是,任意拿出螺母中一个遍历螺帽得到配对的,而且螺帽分成两组,这样继续。但stuck在一直从螺母拿去遍历螺帽,如果此时把比出来螺帽拿着去和所有螺母遍历匹配一下,就能把螺母也分成两组。这样就有点像partition算法,就两边都分成两组了,变成子问题。评价n*logn,最差n^2。
第一题的算法,经过回来重写:
#include <vector>
#include <iostream>
using namespace std; int calculate(vector<int> &vec) {
int ans = 0;
int len = vec.size();
for (int k = 0; k < len / 2; k++) {
vector<int> first(len / 2, -1);
vector<int> second(len / 2, -1);
vector<int> minus(len, 0);
int minus_count = 0;
for (int j = 0; j < len; j++) {
if (vec[j] == -1) {
minus_count++;
minus[j] = minus_count;
continue;
}
if (first[vec[j]-1] == -1) {
first[vec[j]-1] = j;
}
else {
second[vec[j]-1] = j;
}
minus[j] = minus_count;
}
int dist = -1;
int x = -1;
int y = -1;
for (int j = 0; j < len / 2; j++) {
if (first[j] == -1) continue;
int tmp_dist = (second[j] - first[j] - 1) - (minus[second[j]] - minus[first[j]]);
if (tmp_dist > dist) {
dist = tmp_dist;
x = first[j];
y = second[j];
}
}
vec[x] = -1;
vec[y] = -1;
ans += dist;
}
return ans;
} int main()
{
// 1, 2, 3, 3, 1, 3, 4, 5, 6, 7, 7, 6, 5, 4
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(2);
vec.push_back(3);
vec.push_back(1);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vec.push_back(6);
vec.push_back(7);
vec.push_back(7);
vec.push_back(6);
vec.push_back(5);
vec.push_back(4);
int ans = calculate(vec);
cout << ans << endl; // 15
system("pause");
}
[mock]12月27日的更多相关文章
- 2016年12月27日 星期二 --出埃及记 Exodus 21:22
2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...
- 北京Uber优步司机奖励政策(12月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 天津Uber优步司机奖励政策(12月21日到12月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 长沙Uber优步司机奖励政策(12月21日到12月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 佛山Uber优步司机奖励政策(12月21日到12月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 广州Uber优步司机奖励政策(12月21日到12月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 上海Uber优步司机奖励政策(12月20日到12月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 苏州Uber优步司机奖励政策(12月21日到12月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 宁波Uber优步司机奖励政策(12月21日到12月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
随机推荐
- JSTL截取字符串
引入头文件支持<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> &l ...
- 关于webview嵌入swf
有的机子CPU不支持swf播放的,不知道你是不是中奖了.. webview 加载swf很简单: if(versionDouble>=2.2){//版本低于2.2的系统无法播放sw ...
- xamarin android——数据绑定到控件(二)
本示例为通过媒体内容提供器获取本机中的图片显示在Gallery中. 活动中简单的初始化代码 private void InitGallery() { Gallery gallery = FindVie ...
- DEDECMS中,获取当前栏目名称
获取当前栏目名称 {dede:field name='typeurl' function=”GetTypeName(@me)”/} 指的是当前栏目的URL地址 {dede:field name='ty ...
- 【转载】GDB反向调试(Reverse Debugging)
记得刚开始学C语言的时候,用vc的F10来调试程序,经常就是一阵狂按,然后一不小心按过了.结果又得从头再来,那时候我就问我的老师,能不能倒退回去几步.我的老师很遗憾地和我说,不行,开弓没有回头箭.这句 ...
- DigitalOcean(DO)购买VPS流程
背景: 对于一个程序员来说,拥有自己的一台国外服务器是一种多么激动的事情,尽管配置不如自己电脑的1/5,但是想一想可以不用备案搭建网站,可以搭建shadow服务器,从此通过自己的服务器上网,想一想真是 ...
- Python串行运算、并行运算、多线程、多进程对比实验
转自:http://www.redicecn.com/html/Python/20111223/355.html Python发挥不了多核处理器的性能(据说是受限于GIL,被锁住只能用一个CPU核心, ...
- laravel方法汇总详解
1.whereRaw() 用原生的SQL语句来查询,whereRaw('select * from user') 就和 User::all()方法是一样的效果 2.whereBetween() 查询时 ...
- AWK 介绍
一.模式和动作 awk脚本是由模式和操作组成的:pattern {action} pattern与{action}两者是可选的.如果没有模式,则action应用到全部记录,如果没有action,则输出 ...
- android锁屏和finish()后activity生命周期的变化
之前写了一个一键锁屏软件,有个朋友用了后发现了问题,所以昨天研究了一个activity在锁屏后的生命周期变化.如下: 锁屏分为两个步骤,先是锁定屏幕,再是黑屏 onCreate(在该方法里锁屏)--- ...