2019-10-14 15:30:38

总体感受:这次依然很快搞定了前三题,最后一题乍看之下还是比较简单的,但是出奇多的corner case让我非常苦恼,这也让我意识到要想真正征服最后一题,还有一个能力需要培养,就是自己设计case的能力。

这也让我想到了当初实习的最后一次面试,xu问的问题题面非常简单,但是同样是corner case非常的多,当时也是没有很好的处理。

一个题目标为hard,有的是因为代码量巨大(参照双拓扑),有的因为本身算法难度较大(参照dp使数组升序),本次就是另一种原因,就是各种情况的讨论。

多情况讨论,corner case的复杂性可以显著提高问题的难度。

注意点: 要特别主要corner case,在面对看似简单的题目的时候需要独立的设计一些case来测试算法。另外对空间复杂度的估算还是有问题,这次没敢开数组,其实是完全没有问题的。

基于poj的数据,大致的空间限制为10000k,而开10000大小的int[],占用的空间大小仅仅40k,远远达不到mle。

  • 1224. Maximum Equal Frequency

问题描述:

问题求解:

对于每一个位置来说,有两种选择。

一是将之删除,那么其余的数字的出现次数一定是一样的,这个其实可以在统计前一个数字的时候的到结果;

二是将之保留,那么在前面的数字中必然出现了一个数字的出现次数为1,或者当前出现次数 + 1,并且这个数字是独苗,这样才能达到删除一个数,让剩余数字的出现次数完全一致的现象。

    public int maxEqualFreq(int[] nums) {
int n = nums.length;
int[] count = new int[100001];
int[] freq = new int[100001];
int res = -1;
for (int i = 0; i < n; i++) {
int num = nums[i];
freq[count[num]] -= 1;
int cnt = ++count[num];
freq[count[num]] += 1;
// 若目前所有数字的出现次数相等,那么下一个数字就可以删除
if (cnt * freq[cnt] == i + 1 && i != n - 1) res = Math.max(res, i + 1);
// 保留当前的数字,那么必然有一个数字的出现次数
int rest = i + 1 - cnt * freq[cnt];
if ((rest == 1 || rest == cnt + 1) && freq[rest] == 1) res = Math.max(res, i);
}
return res + 1;
}

  

Contest 158的更多相关文章

  1. Codeforces 158 D

    题目链接 :http://codeforces.com/contest/158/problem/D D. Ice Sculptures time limit per test 3 seconds me ...

  2. Codeforces 158E Phone Talks

    http://codeforces.com/contest/158/problem/E 题目大意: 麦克是个名人每天都要接n电话,每通电话给出打来的时间和持续时间,麦克可以选择接或不接,但是只能不接k ...

  3. 牛客训练赛25-A-最长区间

    https://www.nowcoder.com/acm/contest/158#question 这题问最长的严格连续递增序列的最长长度是多少? 最开始感觉这道题不可做,因为有1e5个点,还有1e5 ...

  4. 牛客训练赛25-A-因数个数

    题目链接https://www.nowcoder.com/acm/contest/158/A 无语...这题很迷啊,原谅我的菜,刚开始想用预处理欧拉筛和前缀和,可是这题太血崩了,这样一样要遍历,1-e ...

  5. [nowcoder]再编号

    链接:https://www.nowcoder.com/acm/contest/158/C 每变化一次,tot=tot*(n-1),且每两个数之差delta*=-1,直接根据这两个性质暴力循环1000 ...

  6. [nowcoder]最长区间

    链接:https://www.nowcoder.com/acm/contest/158/B 求最长连续严格递增序列 线段树模板题,码力弱的一匹调了半天.. 代码: #include<iostre ...

  7. [nowcoder]因数个数和

    链接:https://www.nowcoder.com/acm/contest/158/A 考虑每个数对答案的贡献,所以答案就是$\sum_{i=1}^{n}{\lfloor\frac{n}{i}\r ...

  8. [nowcoder]青蛙

    链接:https://www.nowcoder.com/acm/contest/158/F 挺有意思的一道题,考场并查集忘记路径压缩就没AK== 很显然一个贪心是不,每只青蛙使劲往前跳,能跳多远跳多远 ...

  9. VK Cup 2012 Qualification Round 1 E. Phone Talks —— DP

    题目链接:http://codeforces.com/contest/158/problem/E E. Phone Talks time limit per test 3 seconds memory ...

随机推荐

  1. eggjs+vue+nginx配置

    安装node https://github.com/nodesource/distributions#installation-instructions-1 注意使用No root privilege ...

  2. list转map,set,使用stream进行转化

    #list转map,set,使用stream进行转化 函数式编程: 场景: 从数据库中取出来的数据,经常是list集合类型,但是list转map这种场景虽然不常见,但是有时候也会遇到,最常见的还是转为 ...

  3. Python开发(一):Python介绍与基础知识

    Python开发(一):Python介绍与基础知识 本次内容 一:Python介绍: 二:Python是一门什么语言 三:Python:安装 四:第一个程序 “Hello world” 五:Pytho ...

  4. python复制多层目录下的文件至其他盘符对应的目录中

    一.需求 app打包需要打入一些H5进去,以便更快的加载页面.这些H5文件是散落在各个文件夹中的[如下列所示],偶尔各个文件夹还需新增文件,每次新增一个文件,需要改动jenkins上job脚本,比较麻 ...

  5. 7-6 jmu_python_最大公约数&最小公倍数 (10 分)

    本题要求从键盘输入两个整数(以逗号间隔),编程求出这两个数的最大公约数和最小公倍数 提示:求最大公约数可用辗转相除法,最小公倍数用两数的积除以最大公约数 输入格式: 在一行中输入两个整数,以逗号间隔 ...

  6. VUE实现Studio管理后台(七):树形结构,文件树,节点树共用一套代码NodeTree

    本次介绍的内容,稍稍复杂了一点,用VUE实现树形结构.目前这个属性结构还没有编辑功能,仅仅是展示.明天再开一篇文章,介绍如何增加编辑功能,标题都想好了.先看今天的展示效果: 构建树必须用到递归,使用s ...

  7. 使用tf serving-gpu时,没有安装NVIDIA时报的错?

    当部署tf serving-gpu时,出现上述的错误,有两种情况: 1.服务器中已经安装NVIDIA驱动了,只是版本比较低了,需要升级一下比较新的nvidia驱动: 2.就是服务器中没有安装NVIDI ...

  8. Delphi XE XML信息的读取

    <?xml version=""?> <ConString> <Item> <Name/> <Type>C</Ty ...

  9. 添加谷歌拓展程序 vue.js devtools过程中的问题

    在用vue做项目过程中,需要用到vue.js devtools,在从github上面clone下来代码,然后再npm install ,过程报错,然后更新npm包也是会有问题,以下是install的问 ...

  10. 16 搭建Spring Data JPA的开发环境

    使用Spring Data JPA,需要整合Spring与Spring Data JPA,并且需要提供JPA的服务提供者hibernate,所以需要导入spring相关坐标,hibernate坐标,数 ...