一开始介绍项目,最后的反馈是,还是说得不清楚,需要再准备准备。

然后两道题,第一题是有个数组,有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日的更多相关文章

  1. 2016年12月27日 星期二 --出埃及记 Exodus 21:22

    2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...

  2. 北京Uber优步司机奖励政策(12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  3. 天津Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. 长沙Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. 佛山Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. 广州Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 上海Uber优步司机奖励政策(12月20日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 苏州Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 宁波Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

随机推荐

  1. C++对象的JSON序列化与反序列化探索

    一:背景 作为一名C++开发人员,我一直很期待能够像C#与JAVA那样,可以轻松的进行对象的序列化与反序列化,但到目前为止,尚未找到相对完美的解决方案. 本文旨在抛砖引玉,期待有更好的解决方案:同时向 ...

  2. CentOS 下安装JDK

    前提条件 使用干净的centOS 之前肯定没有装过JDK 所以忽略卸载步骤 <1>从SUN下载jdk-1_5_0_14-linux-i586-rpm.bin或jdk-1_5_0_14-li ...

  3. 使用rapid-framework自动生成struct2

    在JavaWeb的开发中,对数据对象的操作不外乎增删改查,不同的数据对象,其action.service.model.jsp等都比较类似,如果手动去写这些代码,工作量大且非常繁琐.一个心高气傲的程序员 ...

  4. javascript 文本框中,判断回车键触发事件 兼容IE&FireFox

    1.onkeypress&onkeydown区别 onkeypress 事件在用户按下并放开任何字母数字键时发生.但是系统按钮(例如:箭头键.功能键)无法得到识别. onkeydown 事件在 ...

  5. struts2.3.15.1 中jsp:include与jsp:forward的用法

    首先配置好struts2的过滤器:web.xml中的配置 <filter> <filter-name>struts-prepare</filter-name> &l ...

  6. foreach的原理

    1.foreach 语句对实现 System.Collections .IEnumerable 或 System.Collections.Generic .IEnumerable <T > ...

  7. PHPNow升级PHP版本的方法

    在WIN上有时候需要测试一些PHP程序,又不会自行独立配置环境,那么PHPNow是非常好的选择. PHPNow自带的PHP版本为5.2.14,而最后一次更新在于2010-9-22,PHP5.2对于现在 ...

  8. PHP取二进制文件头快速判断文件类型

    <?php /*文件扩展名说明 *7173 gif *255216 jpg *13780 png *6677 bmp *239187 txt,aspx,asp,sql *208207 xls.d ...

  9. php中封装的curl函数(抓取数据)

    介绍一个封闭好的函数,封闭了curl函数的常用步骤,方便抓取数据. 代码如下: <?php /** * 封闭好的 curl函数 * 用途:抓取数据 * edit by www.jbxue.com ...

  10. php 时间转化总结

    iQuery插件datepicker获取的时间函数为"月月/天天/年年年年"(以04/21/2015为例)的形式 (1)转化为2015-21-04形式:$start = date( ...