网易互娱
处理条件1;
处理5;
处理3,4的同时处理2;
对最后两个字符处理2.
对第3、4个条件的处理:
judgeDengcha(int a,b,c){//对第3个条件的处理:
if a,b,c都是数字 && 2b == a + c
return true;
else
return false;
}
judge3Small(a,b,c){}; \\对第4个条件的处理。
judge3Big(a,b,c){}; \\对第4个条件的处理。
j = 0;
while(j++ < a.length -3){
if ( judgeDengCha(a[j-2],a[j-1],a[j])|| judge3Small(a,b,c) || judge3Big(a,b,c) ||)
return false;
}
处理最后两个字符
处理条件1;
处理5;
处理3,4的同时处理2;
对最后两个字符处理2.
2018拼多多
贪心+动态规划(最长升序子序列)+dfs
题目:
一个无序正整数的数组(元素个数上限是50),每次可以取数组中的一个严格升序或者严格降序的序列,问你最少多少次能把数组中全部元素取走?
解法:
假设求最长严格升(降)子序列的复杂度是 a ; 在此操作基础上做贪心,每次对剩余序列有找最大升序子序列和最大降序子序列2种方案 ,两种方案都要保留,不能对两种方案取贪心只留一种,所以 此处dfs回溯算法算法复杂度上界是 (2^n , 当所有数字相等时达到上界),如果最大升序列同时有多个解,选取结尾数字最大的一种方案,降序同理。最终这个算法的复杂度是 (2^n)*a , a = nlogn 或 n*n
暂未找到反例。
2018深信服
递推-抓兔子
d[i][j]=1 表示为了不被抓住,第i天兔子不能出现在j号洞。根据输入的农夫第i天检查的洞的序号k, 将数组初始化为 d[i][k] = 1.
然后从第n天递推第n-1天不能出现的洞,标记为1. 有两种情况, d[i][2或4] = 1 时, d[i-1][1或5] 要赋值为1; if (d[i][t-1] && d[i][t+1] == 1) d[i-1][t] = 1 .
如果d[1][j] 全部等于1,表示兔子第一天哪都不能出现,农夫胜利;反之,农夫不是必胜测略。
空间复杂度优化:由于d[i-1]只与d[i]有关,可将二维数组压缩为2个一维数组。
将第0个洞和第n+1两个辅助洞初始化为1, 则可以统一递推公式 d[i-1][j] = d[i][j-1] && d[i][j+1]
Hash-发礼品
先存hash,hash能插入,再存List,最后输出list。