首页 > 其他分享 >Day2 数组训练

Day2 数组训练

时间:2023-10-17 17:15:46浏览次数:37  
标签:训练 nums int Day2 ++ vector result 数组

Day2 数组的一些基本练习

  • 前一阵子生病了,把这几天落下来的内容慢慢补

第一题 有序数组的平方 Lc 977

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
//使用双指针的思想完成此题,一开始我想的是直接暴力解,这有什么难的,直接平方然后sort,但是这样的话复杂度有ologn
//用双指针的话就是再开辟一个数组,然后两边比较,大的就放数组里面,思路很简单,就看代码熟练度怎么样
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int k =nums.size()-1;
        vector<int> result(nums.size(),0);//这里的几个size我思考了很久,什么时候-1,什么时候不用-1,实际上就是开辟数组的时候需要那个多出来的位置,实际上变量写的时候就不用那个位置了。
        for(int i=0,j=nums.size()-1;i<=j;){
            if(nums[i]*nums[i]<nums[j]*nums[j]){
                result[k--]=nums[j]*nums[j];
                j--;
            }else{
                result[k--]=nums[i]*nums[i];
                i++;
            }
        }
        return result;
    }
};

第二题 长度最小的子数组 Lc209

给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int result = INT32_MAX;
        int sum=0;
        int subL=0;
        int i=0;
        for(int j=0;j<nums.size();j++){
            sum+=nums[j];
            while(sum>=target){
                subL = j-i+1;
                result= min(result,subL);
                sum -=nums[i];  //这里是滑动窗口的精髓,突出一个滑动,保证只需要遍历一次,前面那个i不用跟着动,跟着动的是sum。
                i++;
            }
        }
        return result == INT32_MAX ? 0: result;
    }
};

第三题 螺旋矩阵 Lc59

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
主要是牢记左闭右开,把每一个段给分清楚,其他的代码写的都差不多。
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res (n, vector<int> (n,0));
        int startX=0,startY=0;
        int count=1;
        int loop=n/2; //控制圈数
        int offset=1; //控制每次缩进去一个offset
        int i,j; // 左闭右开
        while(loop--){
            for(j=startY;j<n-offset;j++){
                res[startX][j]=count++;
            }
            for(i=startX;i<n-offset;i++){
                res[i][j]=count++;
            }
            for(;j>startY;j--){
                res[i][j]=count++;
            }
            for(;i>startX;i--){
                res[i][j]=count++;
            }
            startX++;
            startY++;
            offset++;
        }
        if(n%2){
            res[n/2][n/2]=count;
        }
        return res;
    }
};

标签:训练,nums,int,Day2,++,vector,result,数组
From: https://www.cnblogs.com/fancele/p/17770144.html

相关文章

  • c++数组的二进制文件读写
    #include<fstream>//forifstream、ofstreamtemplate<typenameOB>inlinevoidsaveObject(constchar*filename,OB&object,intlength)//传入要保存的对象引用{std::ofstreamosm(filename,std::ios::out|std::ios::binary);osm.write((constcha......
  • Vue性能优化--在Vue中,千万别用属性数组作为循环的对象
    在Vue中,千万别用属性数组作为循环的对象methods:{test(){...上面省略业务逻辑1万字 //16位像素数组letdcmbuffer=newUint16Array(dcmInfo._dictionary.dict["7FE00010"].Value[0]asArrayBuffer);this.currentImageInfo={......
  • 代码随想训练营第五天(Python)| 242.有效的字母异位词、349. 两个数组的交集、第202题.
    242.有效的字母异位词1、数组法这个思路贼6,在这个题的效率也高classSolution:defisAnagram(self,s:str,t:str)->bool:#全部转为asii码如果是互为异为词,则最后的-+后的结果为0record=[0]*26#范围是26。一维foriins......
  • 代码随想录第六天 | 哈希表、242.有效的字母异位词 、349. 两个数组的交集 、202. 快
    哈希表什么是哈希表哈希表是根据关键码的值而直接进行访问的数据结构。简单的例子:数组什么时候想到用哈希法当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。哈希碰撞元素通过哈希函数被映射到同一个索引下标位置解决方法:拉链法从发生冲......
  • 代码随想训练营第三天(Python) | 203.移除链表元素、707.设计链表、206.反转链表
    一、203.移除链表元素关键点:如何删除节点,需要知道删除节点前的节点。1、无虚拟头节点的方法classSolution:defremoveElements(self,head:Optional[ListNode],val:int)->Optional[ListNode]:whilehead!=Noneandhead.val==val:#如果头节点的值......
  • 14 数组变化侦听
    1.变更:可以自动更新UI2.替换数组......
  • 后缀数组 SA
    膜拜zxy,1h学会SA。这玩意真的好绕啊>w<给定一个字符串\(S\),设\(S(l,r)\)表示\(S_l\dotsS_r\)组成的字符串,\(s(i)\)表示\(S(i,n)\)。将\(s(1),\dots,s(n)\)排序,设\(sa[i]\)表示排名为\(i\)的字符串为\(s(sa[i])\)。我们顺次考虑按照前\(1,2,4,8,\dots,k\)......
  • 链表的头插和尾插(数组--链表)
    头插法代码示例publicclassLinkDemo{publicstaticvoidmain(String[]args){//将这个数组按头插的方式插入列表int[]arr={1,2,3,4,5,6,7,8,9};headIndert(arr);}publicstaticvoidheadIndert(int[]arr){Nodeli......
  • python学习之二位数组
    创建二维数组其实python没有数组的概念,是用list来代替的,创建其实可以直接写入行列式如下:也可以使用numpy,后面用到的话再写一篇运行结果如上从输入流写入数组目前只懂需要输入行跟列的二位数组,如果用到需要根据输入长度来判断的时候在补充 ......
  • 创建numpy数组
     1.2.1创建NumPy数组的多种方式¶array:将数组转换为ndarray,推断dtype或者显示指定arange:类似内置函数range,返回ndarrayzeros:创建全0数组,可指定形状和dtypeones:创建全1数组,可指定形状和dtypeempty:创建新数组,只分配内存空间、不填充任何值1.2.2转换NumPy数......