zoukankan      html  css  js  c++  java
  • 5401.是否所有1都至少相隔k个元素

    image-20200503175036891

    解题

    思路

    • 这道题想复杂了,实质就是遍历找1,像[1,0,0,0]这种类型的,一脸懵,所以理解题意很重要,还有需要注意提示的信息。
    • 最后虽然通过,但写得太。。。啰嗦了

    代码

    /*
    	*缺陷太大
    	*18ms
    */
    public boolean kLengthApart(int[] nums, int k) {
            int len = nums.length;
            int count = 0;
            int min = 0;
            int c1 = 0;
            List<Integer> list = new ArrayList<>();
            count = nums[0] == 1 ? 0 : 1;
            for (int i = 1; i < len; i++) {
                if (nums[i] == 0) {
                    count += 1;
                } else {
                    c1++;
                    list.add(count);
                    count = 0;
                }
            }
            if ((nums[0] == 1 && c1 == 1)) {
                return true;
            }
            if (c1 == 0) {
                return true;
            }
            Collections.sort(list);
            min = list.get(0);
            return min == k;
        }
    

    优解

    思路

    • 使用双指针pre 、next 分别记录 “1” 的 一前一后 的索引
    • 将初始pre=-100000,因为第一个1的左边没有0,并不需要判断间距,但根据代码逻辑,会计算间距,只要保证计算出的间距大于等于k即可。而k的最大值为100000,将pre=-100000,next=0就能保证。
    • 只要这个间距小于k,即不满足要求,就return false;
    • 数组中只有一个1或没有1,不会进入if循环(当时纠结这个问题)

    代码

       /**
         * 1 <= nums.length <= 10^5
         * 0 <= k <= nums.length
         * nums[i] 的值为 0 或 1
         *
         *  1ms
         */
        public boolean kLennugthApart2(int[] nums,int k){
            int len=nums.length;
            for(int pre=-100000,next=0;next<len;next++){
                if(nums[next]==1){
                    if(next-pre-1<k){
                        return false;
                    }
                    pre=next;
                }
            }
            return true;
        }
    
  • 相关阅读:
    P5331 [SNOI2019]通信
    P3700 [CQOI2017]小Q的表格
    Linux
    P3268 [JLOI2016]圆的异或并
    P3317 [SDOI2014]重建
    P5492 [PKUWC2018]随机算法
    P3210 [HNOI2010]取石头游戏
    支配树
    P5401 [CTS2019]珍珠
    P4027 [NOI2007]货币兑换
  • 原文地址:https://www.cnblogs.com/yh-simon/p/12822820.html
Copyright © 2011-2022 走看看