• 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;
        }
    
  • 相关阅读:
    延迟任务的实现方式
    brpc的安装20220620可用
    tmux和zsh的个性化配置针对无法连接外网的机器
    VimForCpp离线安装
    记录一个vim配置
    LeetCode No1051. 高度检查器
    LeetCode No890. 查找和替换模式
    LeetCode No63. 不同路径 II
    LeetCode No64. 最小路径和
    个人资料
  • 原文地址:https://www.cnblogs.com/yh-simon/p/12822820.html
Copyright © 2020-2023  润新知