首页 > 编程语言 >代码随想录算法训练营第第二天 | 977.有序数组的平方 、27. 移除元素

代码随想录算法训练营第第二天 | 977.有序数组的平方 、27. 移除元素

时间:2024-05-09 22:56:58浏览次数:27  
标签:977 return nums 随想录 number let https 移除 com

977.有序数组的平方

题目建议: 本题关键在于理解双指针思想

题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
文章讲解:https://programmercarl.com/0977.有序数组的平方.html
视频讲解: https://www.bilibili.com/video/BV1QB4y1D7ep

/**
 * @param {number[]} nums
 * @return {number[]}
 * 双指针,用另一个数组承载最终的结果
 */
var sortedSquares = function(nums) {
    let i = 0;
    let j = nums.length-1;
    let k = nums.length-1;
    const res = new Array(nums.length);
    while(i<=j){
        if(Math.pow(nums[i],2)<Math.pow(nums[j],2)){
            res[k] = Math.pow(nums[j],2);
            j--;
            
        } else {
            res[k] = Math.pow(nums[i],2);
            i++;
        }
        k--;
    }
    return res;
};

209.长度最小的子数组

题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
文章讲解:https://programmercarl.com/0209.长度最小的子数组.html
视频讲解:https://www.bilibili.com/video/BV1tZ4y1q7XE

/**
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 * 能想到滑动窗口,做的时候是先进行累加,在加的过程进行判断,之前有点和快慢指针混淆了
 */
var minSubArrayLen = function(target, nums) {
    let i = 0;
    let min = nums.length+1;
    let total = 0;
    for(let j=0;j<nums.length;j++){
        total+=nums[j];
        while(total>=target){
            min = min > (j-i+1)?(j-i+1):min;              
            total -= nums[i];
            i++;
            
        }
    } 
    if (min === nums.length+1) {
        return 0;
    }
    return min;
};

59.螺旋矩阵II

题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。

题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
文章讲解:https://programmercarl.com/0059.螺旋矩阵II.html
视频讲解:https://www.bilibili.com/video/BV1SL4y1N7mV/

/**
 * @param {number} n
 * @return {number[][]}
 *这个能想到用变量改变方向,但是思路太混乱,还是找出其中的规则
 */
var generateMatrix = function(n) {
    const resArr = new Array(n).fill(0).map(()=>new Array(n).fill(0));
    let startx  = 0,starty=0; //每个圈的开始坐标
    let loop = Math.floor(n/2);  //一共循环几个圈
    let i,j;
    let offest = 1;//控制每条边的遍历长度
    let count = 1; //赋值的数字
    let mid = Math.floor(n/2); //如果n是奇数,则最中间的一圈只有一个数字,需单独赋值
    while(loop--){
        i = startx;
        j = starty
        for(j;j<n-offest;j++){
            resArr[i][j] = count++;
        }

        for(i;i<n-offest;i++){
            resArr[i][j] = count++;
        }

        for(j;j>startx;j--){
            resArr[i][j] = count++;
        }

        for(i;i>starty;i--){
            resArr[i][j] = count++;
        }

        startx++;
        starty++;
        offest+=1;
    }
    if (n%2) {
        resArr[mid][mid]=n*n;
    }
    return resArr;
};

标签:977,return,nums,随想录,number,let,https,移除,com
From: https://www.cnblogs.com/yuanyf6/p/18183251

相关文章

  • 代码随想录算法训练营第第一天 | 704. 二分查找 、27. 移除元素
    704、二分查找题目链接:https://leetcode.cn/problems/binary-search/文章讲解:https://programmercarl.com/0704.二分查找.html视频讲解:https://www.bilibili.com/video/BV1fA4y1o715`varsearch=function(nums,target){letleft=0;letright=nums.length;letmi......
  • 代码随想录算法训练营第一天 | 704.二分查找 27.移除元素
    704.二分查找题目链接:https://leetcode.cn/problems/binary-search/文档讲解:https://programmercarl.com/0704.二分查找.html视频讲解:https://www.bilibili.com/video/BV1fA4y1o715左闭右开时间复杂度O(logn)空间复杂度O(1)classSolution{public:intsearch(......
  • Leetcode --- 203. 移除链表元素
    题目描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。示例1: 示例输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]输入:head=[7,7,7,7],val=7输出:[]参考实现方式1、使用递归实现......
  • 《代码随想录》-2.二分查找
    前提:1.有序2.无重复//版本1intleft=0;intright=nums.size()-1;while(left<=right){intmiddle=left+(right-left)/2;//防止溢出if(nums[middle]>target){right=milddle-1;}elseif(nums[middle]<target{left=middle+1;}else{returnmiddle;......
  • 《代码随想录》-1.数组理论基础
    特点:1.内存空间-连续存放——>增删元素麻烦2.数据-相同类型3.下标从0开始注意:数组的元素采用覆盖的形式二维数组在内存的空间地址:1.C++中二维数组在地址空间上是连续的2.Java中二维数组每一行的头节点的地址是没有规则的......
  • c#数组移除同一个值
    数组移除数据,需要循环覆盖的方法。可以快慢双指针。循环一遍。publicintRemoveElement(int[]nums,intval){intn=nums.Length;intlow=0;for(inti=0;i<n;i++){if(nums[i]!=val){nums[low]=nums[......
  • 代码随想录算法训练营第11天 | 栈与队列 20.有效的括号 1047.删除字符串中的所有相邻
    leetcode20.有效的括号题目20.有效的括号给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。解题思路实现代码leetcod......
  • 代码随想录算法训练营第10天 | 栈和队列 232.用栈实现队列 225.用队列实现栈
    leetcode232.用栈实现队列题目232.用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intpop()从队列的开头移除并返回元素intpeek()返回队列开头的......
  • 2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2, 分别移除它们各自的一
    2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2,分别移除它们各自的一半元素,将剩下的元素合并成集合s。找出集合s中可能包含的最多元素数量。输入:nums1=[1,2,3,4,5,6],nums2=[2,3,2,3,2,3]。输出:5。答案2024-05-01:chatgpt题目来自leetcode3002。大体......
  • 力扣-203. 移除链表元素
    1.题目题目地址(203.移除链表元素-力扣(LeetCode))https://leetcode.cn/problems/remove-linked-list-elements/题目描述给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。 示例1:输入:head=[1,2,6,3,4,5,......