代码随想录打卡day2

977,有序数组的平方排序

class Solution {
    public int[] sortedSquares(int[] a) {
        //每次往两侧找,取两侧最大的一个,放入队列中最后当成最大的
        int left = 0;
        int right = a.length -1;
        int rail_ptr = a.length -1;
        int[] b = new int[a.length];
        while(left <= right) {
            if (a[left]*a[left] > a[right]*a[right]) {
                b[rail_ptr] = a[left] * a[left];
                rail_ptr--;
                left++;
            }
            else {
                b[rail_ptr] = a[right]*a[right];
                rail_ptr--;
                right--;
            }
        }
        return b;
    }
}

209,长度最小的子序列
方法:滑动窗口

class Solution {
    public int minSubArrayLen(int target, int[] a) {
        //i是后指针,j是前指针
        //sum用来判断从0到i,这i+1个元素之和有没有达到target的基础条件
        //达到之后,再减少j,看区间能不能缩小
        //注意,这里的j是单调的, 比如i = i1 时,对应[j1,i1]是最小区间
        //那么i = i2 > i1, [j1,i2]必定满足条件而且区间长度比[j1,i1]大1,
        //需要淘汰,前指针从j1+1开始,也就是测试区间从[j1+1,i1+1]开始
        int minlen = Integer.MAX_VALUE;
        int   jlen = Integer.MAX_VALUE;
        int sum = 0;
        int   j = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
            while (sum >= target) {
                sum -= a[j];
                jlen = i-j+1;
                minlen = Math.min(minlen, jlen);
                j++;
            }
        }
        //min经过修改,说明找到满足target的区间;min未经过修改,说明没找到
        return minlen = (minlen == Integer.MAX_VALUE)? 0 : minlen;
    }
}

59,螺旋矩阵
方法:找规律

class Solution {
    public int minSubArrayLen(int target, int[] a) {
        //i是后指针,j是前指针
        //sum用来判断从0到i,这i+1个元素之和有没有达到target的基础条件
        //达到之后,再减少j,看区间能不能缩小
        //注意,这里的j是单调的, 比如i = i1 时,对应[j1,i1]是最小区间
        //那么i = i2 > i1, [j1,i2]必定满足条件而且区间长度比[j1,i1]大1,
        //需要淘汰,前指针从j1+1开始,也就是测试区间从[j1+1,i1+1]开始
        int minlen = Integer.MAX_VALUE;
        int   jlen = Integer.MAX_VALUE;
        int sum = 0;
        int   j = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
            while (sum >= target) {
                sum -= a[j];
                jlen = i-j+1;
                minlen = Math.min(minlen, jlen);
                j++;
            }
        }
        //min经过修改,说明找到满足target的区间;min未经过修改,说明没找到
        return minlen = (minlen == Integer.MAX_VALUE)? 0 : minlen;
    }
}
1 声望
0 粉丝
0 条评论
推荐阅读
用javascript分类刷leetcode20.字符串(图文视频讲解)
给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删...

hellocoder20281阅读 368

刷完15道js版dp题,面试再也不怕了
某个男人 动态规划,而我作为一个致力称为厨师界最会写算法的前端,总得刷上一部分题,有那么一点发现吧,现在我们就来聊聊,菜鸡如我,发现了什么。

hellocoder20281阅读 353

力扣之 4 的幂 & 3 的幂 & 2 的幂(递归思想)
题目描述给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x示例 1: {代码...} 示例 2: {代码...} 示例 3: {...

水冗水孚1阅读 668

力扣之仅仅反转字母(双指针方式)
题目描述给你一个字符串 s ,根据下述规则反转字符串:所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。返回反转后的 s 。示例 1: {代码...} 示例 2: {代码...} 示例 3: {代码...}  力扣...

水冗水孚1阅读 520

力扣之按身高排序
题目描述给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。请按身高 降序 顺序返回对应...

水冗水孚阅读 1.1k

力扣之回文数(双指针中的对撞指针公式模板)
什么双指针没刷算法之前,一听双指针,感觉很厉害的样子。实际上呢?也的确是一个不错的解题思路方式。在LeetCode上的双指针是一大类题目的解决方式,看一下,发现有近200题是双指针类型的,如下图:由此可见,双...

水冗水孚阅读 956

力扣之反转字符串之原地修改输入数组(双指针方式)
题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1: {代码...}...

水冗水孚阅读 876

封面图
1 声望
0 粉丝
宣传栏