滴滴秋储笔试(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;
}

#滴滴笔试#
全部评论
老哥,能帮我看一下,我这样写的dfs,问题出在哪吗?感觉思路和你差不多,但是只过了18%~😥
1 回复 分享
发布于 2022-06-11 22:15

相关推荐

我是小红是我:学校换成中南
点赞 评论 收藏
分享
评论
9
17
分享
牛客网
牛客企业服务