坚持每日一题 7.15

坚持持续学习,每日一题慢慢把之前都学过的算法捡回来,不断巩固,希望自己能坚持下去。
题目:https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76?tpId=295&tqId=2227748&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
首先没有想到分治法,分治法:分治即“分而治之”,“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题,子问题继续按照这样划分,直到问题可以被轻易解决;“治”指的是将子问题单独进行处理。经过分治后的子问题,需要将解进行合并才能得到原问题的解,因此整个分治过程经常用递归来实现。
想象一下,如果有上坡那么一定会有下坡,如果mid < 右边元素那么一定是在上坡,即l = mid + 1,当mid > mid + 1的时候标明已经再下坡,r = mid及时标记顶峰的位置,最后可以得到答案
图片说明

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
   public int findPeakElement (int[] nums) {
        // write code here
       int l = 0;
       int r = nums.length - 1;
       while(l < r){
           int mid = (l + r) / 2;
           if(nums[mid] > nums[mid + 1]) r = mid;
           else l = mid + 1;
       }
        return r;
    }
}

代码是比较简单的二分,不过条件要注意保留山峰的位置。

全部评论

相关推荐

完美的潜伏者许愿简历通过:我上表jd,请求封我做后端大将军的事,北京有消息了:竟然不许!!! 他们一定是看我没有实习,这才故意驳回我的请求!
点赞 评论 收藏
分享
迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务