首页 > 编程语言 >代码随想录算法训练营第二天

代码随想录算法训练营第二天

时间:2023-09-07 20:34:59浏览次数:42  
标签:nums int 训练营 随想录 length ++ 算法 result startPoint

代码随想录算法训练营第二天 | LeetCode 977(有序数组的平方) LeetCode 209(长度最小的子数组) LeetCode 59(螺旋矩阵II)

977:有序数组的平方

LeetCode 977(有序数组的平方)
思路:

方法一:暴力方法
直接原地平方后,直接调用数组排序
方法二:双指针前后遍历,构造结果数组,保证有序

方法一

class Solution {
    public int[] sortedSquares(int[] nums) {
        for(int i  = 0; i < nums.length; i++) {
            nums[i]  = nums[i] * nums[i];
        }
        Arrays.sort(nums);
        return nums;
    }
}

方法二

class Solution {
    public int[] sortedSquares(int[] nums) {
        //定义左右指针 左闭右闭
        int left = 0;
        int right = nums.length - 1;
        //构造结果数组
        int[] res = new int[nums.length];
        int index = nums.length - 1;
        while(left <= right){
            int left2 =  nums[left] * nums[left];
            int right2 = nums[right] * nums[right];
            //根据左右指针索引目标值大小 插入结果数组
            if(left2 < right2){
                res[index--] = right2;
                right--;
            }else if(left2 >= right2){
                res[index--] = left2;
                left++;
            }
        }
        return res;
    }
}

209:长度最小的子数组

LeetCode 209(长度最小的子数组)
思路:

滑动窗口
如何实现滑动窗口:
1.窗口内是什么
2.如何移动窗口的起始位置
3.如何移动窗口的结束位置

方法一

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        // 滑动窗口数值之和
        int sum = 0;
        int result = Integer.MAX_VALUE;
        int length = 0;
        // 滑动窗口起始位置和终点位置
        int pre = 0,behind = 0;
        while(pre < nums.length){
            sum += nums[pre];
            //根据子序列是否符合条件来 不断更新起始位置
            while(sum >= target){
                //计算子序列长度
                length = pre - behind + 1;
                result = Math.min(result, length);
                //更新起始位置
                sum -= nums[behind++];
            }
            pre++;
        }
        return result == Integer.MAX_VALUE ? 0 : result;
    }
}

59:螺旋矩阵II

LeetCode 59(螺旋矩阵II)
思路:

坚持循环不变量原则
模拟其螺旋规则
1.填充上行从左到右
2.填充右列从上到下
3.填充下行从右到左
4.填充左列从下到上
所以需要考虑 怎么循环 循环起点和终点

方法一

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] result = new int[n][n];
        int loopCount = 0;
        int count = 1;
        int startPoint = 0;
        int i,j;
        //均遵循左闭右开
        while(loopCount < (n >> 1)) {
            loopCount++;
            //上侧 从左到右
            for(j = startPoint; j < n - loopCount; j++) {
                result[startPoint][j] = count++;
            }
            //右侧 从上到下
            for(i = startPoint; i < n - loopCount; i++) {
                result[i][j] = count++;
            }
            //下侧 从右到左
            for(; j >= loopCount; j--) {
                result[i][j] = count++;
            }
            //左侧 从下到上
            for(;i >= loopCount; i--){
                result[i][j] = count++;
            }
            startPoint++;
        }
        //n为奇数时需要单独给矩阵中心赋值
        if(n % 2 == 1){
            result[startPoint][startPoint] = count;
        }
        return result;
    }
}

标签:nums,int,训练营,随想录,length,++,算法,result,startPoint
From: https://www.cnblogs.com/Q316/p/17685974.html

相关文章

  • 机器学习算法原理实现——使用交叉熵、梯度下降求解逻辑回归
    交叉熵的定义以及和熵的区别?   交叉熵是衡量两个概率分布之间的差异的一个度量。在机器学习和深度学习中,尤其是分类问题,交叉熵常被用作损失函数。交叉熵度量的是实际分布(标签)与模型预测之间的不一致程度。 这个值越小,模型的预测与真实分布越接近。完美的预测会有交......
  • KMP算法详解
    呼——终于看懂了KMP——磕了三天了。题目直达Q:KMP是干什么的?是查找字符串用的,可以查找到\(S2\)字符串在\(S1\)字符串中出现的位置(当然,你可以统计出次数)。Q:那复杂度是多少的?通常,我们认为他的复杂度是\(O(|S1|)\),虽然有点常数。常规的的比较方法是直接比较,枚......
  • 算法单元重启啦!
    开始跟着代码随想录重新学算法了,计划是按照它的目录一个专题一个专题地刷。我的文章目录会放在下面,按照自己的进度更新,整理出来一些有价值的基础知识和题解代码。使用语言是python,但知识点部分也会涉及C++。欢迎阅读点赞~目录数组链表......
  • LRUCache算法缓存策略(map+doubleLinkedList)
    packagearithmetic;importjava.util.HashMap;publicclassFaceTest81{//LRUcache缓存策略map+双向链表//get、update、put需要时间复杂度达到O1//map+双向链表结构publicFaceTest81(intcapacity){ cache=newMyCache(capacity);}privateMyCache<Integer,Intege......
  • 2023“钉耙编程”中国大学生算法设计超级联赛(4)
    1003SimpleSetProblem题意:分别从k个集合中选一个元素组成一个数组\((a_1,a_2,a_3,...,a_k)\),求max\((a_1,a_2,a_3,...,a_k)\)-min\((a_1,a_2,a_3,...,a_k)\)的最小值。分析:我们给每个集合中的元素添加一个id标识它属于哪个集合,然后将所有集合合并并按数值大小从......
  • day24 - 回溯算法part01
    回溯算法理论基础 77. 组合classSolution{public:vector<vector<int>>result;vector<int>path;voiddfs(intn,intk,intstart){if(path.size()==k){result.push_back(path);return;}......
  • Lnton羚通AI算法算力平台在海域可视化监管海域动态远程视频智能监管平台的构建方案
    一、方案背景随着科技的不断进步,智慧海域管理平台已成为海洋领域监管的关键工具。相比传统的视频监控方式,智慧海域管理平台通过建设近岸海域视频监控网、海洋环境监测网和海上目标探测网络等,实现了海洋管理的数字化转型。传统的监控方式需要大量人力物力,而智慧海域管理平台实现了......
  • 算法题---Jill旅行
     【问题描述】Jill要进行一次旅行,沿途中要经过若干个城市。对于每两个相邻城市之间的路程,他都可以选择骑自选车或是坐公车汽车。如果沿途风景怡人,则他更喜欢骑自选车来完成这段路程。Jill对每段路程都有评出了一个满意度,这是一个非零整数,所有他喜欢的路程标以正数,不喜欢的路程标......
  • 【腾讯云 Cloud Studio 实战训练营】- Cloud Studio 提高前后端工程化效率
    一、前言:从学校毕业到现在,工作也有5-6个年头了,您的开发中,是不是跟我一样,场景会遇到以下的困境呢?序号分类问题点困境1环境安装①.刚入职公司,需要安装各种复杂的开发环境②.有时候,解决不了,还不能声张,声怕同事说自己菜,死鸭子嘴硬x重复低效2环境安装开发过程中,误删除软件、误改配置......
  • Lnton羚通视频分析算法开发yolov8训练与rknn模型导出并在RK3588部署的详细步骤
    Lnton羚通的算法算力云平台以其突出的特点成为一款优秀的解决方案。它的高性能、高可靠性、高可扩展性和低成本使得用户能够高效地进行复杂的计算任务。同时,丰富的算法库和工具以及支持用户上传和部署自定义算法的功能进一步提升了平台的灵活性和个性化能力。一、环境验证(一)板端验......