滴滴秋储笔试(2022年06月11日)
编程题
1) 给定一个数组,可以将任意一个数字标记为红色或者蓝色,使得所有红色数字递增,蓝色数字递减;
判断是否可以将所有数字都染色
例子:
输入:
7 4 1 3 2 5 6输出
Yes解释
7 4 3 标记为蓝色 为降序 1 2 5 6 标记为红色 为升序代码
boolean isIllegal(int[] values) {
// 让第一个数字为降序或者升序的一部分,进行dfs搜索
return dfs(values, 1, values[0], Integer.MAX_VALUE) || dfs(values, 1, Integer.MIN_VALUE, values[0]);
}
/**
* @param values
* @param index 当前搜索的数字
* @param preLower 升序序列的末尾
* @param preHigher 降序序列的末尾
* @return
*/
boolean dfs(int[] values, int index, int preLower, int preHigher) {
if (index >= values.length) return true;
// values[index] 作为升序序列的一部分
if (values[index] > preLower && dfs(values, index + 1, values[index], preHigher)) {
return true;
}
// values[index] 作为降序序列的一部分
if (values[index] < preHigher && dfs(values, index + 1, preLower, values[index])) {
return true;
}
// 都不行,返回false
return false;
} 
查看6道真题和解析