首页 > 其他分享 >代码随想录day2|977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵

代码随想录day2|977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵

时间:2022-09-22 19:00:37浏览次数:85  
标签:977 https int 随想录 vector result 数组 指针

977.有序数组的平方

第一遍思路

在看到要求时间复杂度为o(n)时,想到只能对整个数组进行一次遍历,不能直接使用排序算法,因此不能先排序再平方。从双指针法的角度进行考虑,这道题也就迎刃而解了。

点击查看代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int left=0;
        int right=nums.size()-1;
        vector<int> result;
        while(left<=right){
            if(abs(nums[left])<=abs(nums[right])){
                result.push_back(nums[right]*nums[right]);
                right--;
            }
            else{
                result.push_back(nums[left]*nums[left]);
                left++;
            }
        }
        reverse(result.begin(),result.end());
        return result;

    }
};

思路总结

这道题还是比较简单的。面对数组问题时,在没有思路时,我们可以试着从方法的角度来进行考虑,一看到数组题就要想到数组常用的方法,在从中选要用的方法。总之,多练习多思考才能熟练。

209.长度最小的子数组

第一遍思路

对于数组我想到用两个指针去控制,当总和大于等于target时,左指针前移,否则,右指针前移。我的想法是终结条件为左指针小于数组长度,用while循环控制两个指针来循环。

实现问题

实现过程中发现右指针小于最大值和等于最大值时是两种情况,因此多加了一个判断。

点击查看代码
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int result=0;//结果
        int left=0;//左边界
        int right=0;//右边界
        int sum=nums[0];//窗口内的总和
        while(left<=nums.size()-1){
            if(right<nums.size()-1){//当右边界没有到达最大值时
                if(sum<target){
                    sum=sum+nums[right+1];
                    right++;
                }
                else if(sum>=target){
                    if(result==0){
                        result=right-left+1;
                    }
                    else{
                        result=result<(right-left+1)?result:(right-left+1);
                    }
                    sum=sum-nums[left];
                    left++;
                }
            }
            else{//当右边界到达最大值时
                if(sum>=target){
                     if(result==0){
                        result=right-left+1;
                    }
                    else{
                        result=result<(right-left+1)?result:(right-left+1);
                    }
                    sum=sum-nums[left];
                }
                 left++;    

            }

        }
        return result;
    }
};

题后总结

  • 在滑动窗口中,用for循环来控制右指针可以比while循环更加简化
  • 可以将result设置为length+1或者设为INT32_MAX比将result设为0更加简化。

59.螺旋矩阵

第一思路

想了半小时什么也想不出来,不知道怎么下手。。。

实现问题

。。。附上看完思路后的代码

点击查看代码
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> result(n,vector<int>(n,0));
        int startx=0,starty=0;
        int loop=1;
        int mid=n/2;
        int i,j;
        int count=1;
        while(loop<=n/2){
            i=startx;
            j=starty;

            for(;j<n-loop;j++){
                result[i][j]=count++;
            }
            for(;i<n-loop;i++){
                result[i][j]=count++;
            }
            for(;j>starty;j--){
                result[i][j]=count++;
            }
            for(;i>startx;i--){
                result[i][j]=count++;
            }
            loop++;
            startx++;
            starty++;
        }
        if(n%2){
            result[mid][mid]=count;
        }
        return result;
    }
};

题后总结

这个题最大的难度在于不知道如何把问题分成步骤进行循环。对于计算机来说,最擅长的事情就是遍历,要在此基础上进行思考。

标签:977,https,int,随想录,vector,result,数组,指针
From: https://www.cnblogs.com/suodi/p/16717784.html

相关文章

  • 7. NumPy创建区间数组
    1.前言所谓区间数组,是指数组元素的取值位于某个范围内,并且数组元素之间可能会呈现某种规律,比如等比数列、递增、递减等。为了方便科学计算,PythonNumPy支持创建区间数组......
  • 6. Numpy创建数组
    1.前言在《NumPyNdarray对象》一节,介绍了创建ndarray数组的基本方法,除了使用array()方法外,NumPy还提供了其他创建ndarray数组的方法。本节对这些常用方法做简单介......
  • 5. NumPy数组属性
    1.前言本节介绍Numpy数组的常用属性。2.ndarray.shapeshape属性的返回值一个由数组维度构成的元组,比如2行3列的二维数组可以表示为(2,3),该属性可以用来调整数......
  • 方法引用-数组的构造器引用和Junit测试概述
    方法引用-数组的构造器引用ArrayBuilder接口/*定义一个创建数组的函数式接口*/publicinterfaceArrayBuilder{//定义一个创建int类型数组的方法,参数传递......
  • leetcode 1640. 能否连接形成数组
    //1class Solution {    int cnt=0;    public boolean canFormArray(int[] arr, int[][] pieces) {        return dfs(0,arr,pieces); ......
  • vue3+jsx做函数组件
    组件部分:import{h}from"vue";constTest1=(props,context)=>{//context.slots类似react的props.children,但是这里代表插槽,ccname是具名插槽的名字,没有......
  • 算法 玩转数据结构 2-2 二次封装属于我们自己的数组
    1重点关注1.1索引使用数组最大的优点:快速查询。scores[2]·数组最好应用于“索引有语意”的情况。·但并非所有有语意的索引都适用于数组(例如,以身份......
  • 数组常用方法总结
    判断数组中是否存在某个值vararrData=['html','css','javascript'];varvalue='css';console.log(arrData.includes(value));console.log(arrData.some(ite......
  • 代码随想录 数组理论基础,二分查找,移除元素 及 LeetCode 704, 27
    数组理论基础数组是存放在连续内存空间上的相同类型数据的集合。数组下标都是从0开始的。数组内存空间的地址是连续的因为数组的在内存空间的地址是连续的,所以我们在......
  • 数组模拟环形队列
    简介对前面的数组模拟队列的优化,充分利用数组.因此将数组看做是一个环形的。(通过取模的方式来实现即可)代码实现importjava.util.Scanner;publicclassCir......