美团笔试 我。。。。

大家来说一下吧,第二道题怎么做到100的?#美团笔试题##美团#
全部评论
    public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         int n = scanner.nextInt();         int[] arr = new int[n];         for (int i = 0; i < n; i++) {             arr[i] = scanner.nextInt();         }         int tmpArr[] = new int[n];         tmpArr[0] = 1;         for (int i = 1; i < n; i++) {             if (arr[i] > arr[i - 1]) {                 tmpArr[i] = tmpArr[i - 1] + 1;             }else{                 tmpArr[i] = 1;             }         }         int ans = Integer.MIN_VALUE;         for (int i = 1; i < n - 1; i++) {            if(arr[i + 1] > arr[i -1]){                int start = tmpArr[i -1] + 1;                for(int j = i + 1; j < n - 1 && tmpArr[j + 1] > tmpArr[j] ; j++){                    start++;                }                ans = Math.max(ans, start);            }         }         System.out.println(ans);     } AC了
2 回复 分享
发布于 2020-03-19 21:18
我的做法:从左到右遍历得到数组中当前每个数的上升个数。比如:2 1 3 2 5 就是1 1 2 1 2, 然后从右到左遍历,2 1 3 2 5得到的就是1 2 1 2 1。 最后max(res, left[i]+right[i+2])得到答案。 伪代码: for 1 -> n-1     if nums[i] > nums[i-1]         left[i] = left[i-1]+1 for n-2 -> 0     if nums[i] < nums[i+1]         right[i] = right[i+1]+1 for 0 -> n-3     res = max(res, left[i] + right[i+2])
1 回复 分享
发布于 2020-03-19 23:12
[图片]
1 回复 分享
发布于 2020-03-19 22:49
能麻烦发一些这道题的题目吗?
点赞 回复 分享
发布于 2020-03-22 17:08
我发现每次情况删一个数dp一次的话最后只能AC百分之四十多,其他情况超时。然后改了一下,只整体dp一次,然后找到最大数+1能AC百分之七十六😁
点赞 回复 分享
发布于 2020-03-20 15:15
遇到一个逆序的可以无视(因为题目可以删除一个),指针顺势往下移比较大小,不逆序就记录长度更新到结果,逆序就退出这个逆序情况有i和i+2比还有i-1和i+1的两种情况,只做一种只过64,花了好长时间想到另一种把这题a了,我个人是这么个情况
点赞 回复 分享
发布于 2020-03-19 21:21
Dp
点赞 回复 分享
发布于 2020-03-19 21:15
我的做法是这样的,如果检测到一个数,他比两边都大,或者比两边都小(极值,破坏单调的数),就以他为中心向两边搜索两边单调递增递减的区间,加起来。。。
点赞 回复 分享
发布于 2020-03-19 21:10

相关推荐

评论
3
5
分享

创作者周榜

更多
牛客网
牛客企业服务