牛客网真题-60-头条校招

头条校招

http://www.nowcoder.com/questionTerminal/57cf0b1050834901933e9b48daafbb9a

最大最小问题一般都先考虑能不能dp,但这道题不需要dp。
三个数从小到大,间隔10,排序+贪心就好了,最小的三个一组,利用一个容量为queue存储数据,当now-pre<=10,就可以进队。
根据queue的size判断产生结果。可以利用pre和size直接模拟queue,也可以理解为马尔科夫状态过程:当前状态只与前一个状态有关。

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] ints = new int[n];
        for(int i = 0; i < ints.length; i++){
            ints[i] = scanner.nextInt();
        }
        Arrays.sort(ints);
        int index = 0;
        int pre = -1, size = 0, cnt = 0;
        while (index < n) {
//            System.out.println("pre " + pre + " size " + size);
            if(size == 0){
                pre = ints[index];
                size = 1;
            }else if(size == 1){
                if(ints[index] - pre <= 10){
                    pre = ints[index];
                    size = 2;
                }else{
                    pre = ints[index];
                    cnt += 2;
                    size = 1;
                }
            }else{
                if(ints[index] - pre <= 10){
                    pre = -1;
                    size = 0;
                }else{
                    pre = ints[index];
                    cnt++;
                    size = 1;
                }

            }
            index++;
        }
        if(size == 2){
            cnt++;
        }else if(size == 1){
            cnt += 2;
        }
        System.out.println(cnt);
    }
}
全部评论
10 30 这个例子,楼主你这代码就挂了-_-||,主要是size==1那个分支没有考虑全面
点赞 回复 分享
发布于 2021-01-31 10:19

相关推荐

04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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