代码随想录算法训练营第一天| 有序数组的平方 ,长度最小的子数组,螺旋矩阵II

第二天,题目变多,一开始想在值在原容器中进行,但发现,问题有点多,后新开一个容器,完成。

    vector<int> sortedSquares(vector<int>& nums) {
        //递增
        int left ,right;  
        int size=nums.size();
        for(int i=0;i<size;i++){
            nums[i]=nums[i]*nums[i];
        }
        vector<int> return_nums(size);
        int return_index=size-1;
        left=0;
        right=size-1;
        

                //从大到小,小到大,最大的容易找。
        while(left<=right){
            if(nums[right]<nums[left]){
                return_nums[return_index--]=nums[left++];
            }
            else{
                return_nums[return_index--]=nums[right--];
            }
        }
        return return_nums;
    }

下面这一题,想了好久都没有想出来,暴力也没哈 看了视频,采用平滑窗口的方式,OK

    int minSubArrayLen(int target, vector<int>& nums) {
        
        int size=nums.size();
        int mini_len=size+1;
        int first,last;
        int cur_sum=0;
        first=0;
        last=0;
        //采用滑动窗口的办法,主要是判断起点
        while(last<size){
            if(first==last){
                cur_sum=nums[last];
                if(cur_sum>=target){
                    mini_len=1;
                    break;
                }
                last++;
            }
            else{
                cur_sum+=nums[last];
                if(cur_sum>=target){
                     if((last-first+1)<mini_len){
                         mini_len=(last-first+1);
                     }
                    cur_sum-=nums[first++]; 
                    cur_sum-=nums[last]; 
                    continue;      
                }
                else{
                     last++;
                }
            }
        }
        if(mini_len==size+1){
            mini_len=0;
        }
        return mini_len;
    }

第三题,是没有头绪,看级别是简单,有点惭愧。有点暴力

    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> return_vector_2(n, vector<int>(n));
        //先初始化一个数组  上 右
        int mid=n/2;
        int real_value=1;
        int i,j,k;
        int row_num=0;
        for(;row_num<mid;row_num++){
            int offset=n-1-row_num;
            i=row_num;
            for(j=row_num;j<offset;j++){
                return_vector_2[i][j]=real_value++;
            }
            for(i=row_num;i<offset;i++){
                return_vector_2[i][j]=real_value++;
            }
           for(j=offset;j>row_num;j--){
                return_vector_2[i][j]=real_value++;
            }
            for(i=offset;i>row_num;i--){
                return_vector_2[i][j]=real_value++;
            }
        }
        if(n%2==1){
            return_vector_2[mid][mid]=real_value;
        }
        return return_vector_2;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第二十二天的算法训练营主要涵盖了Leetcode题目中的三道题目,分别是Leetcode 28 "Find the Index of the First Occurrence in a String",Leetcode 977 "有序数组平方",和Leetcode 209 "长度最小数组"。 首先是Leetcode 28题,题目要求在给定的字符串中找到第一个出现的字符的索引。思路是使用双指针来遍历字符串,一个指向字符串的开头,另一个指向字符串的结尾。通过比较两个指针所指向的字符是否相等来判断是否找到了第一个出现的字符。具体实现的代码如下: ```python def findIndex(self, s: str) -> int: left = 0 right = len(s) - 1 while left <= right: if s[left == s[right]: return left left += 1 right -= 1 return -1 ``` 接下来是Leetcode 977题,题目要求对给定的有序数组中的元素进行平方,并按照非递减的顺序返回结果。这里由于数组已经是有序的,所以可以使用双指针的方法来解决问题。一个指针指向数组的开头,另一个指针指向数组的末尾。通过比较两个指针所指向的元素的绝对值的大小来确定哪个元素的平方应该放在结果数组的末尾。具体实现的代码如下: ```python def sortedSquares(self, nums: List[int]) -> List[int]: left = 0 right = len(nums) - 1 ans = [] while left <= right: if abs(nums[left]) >= abs(nums[right]): ans.append(nums[left ** 2) left += 1 else: ans.append(nums[right ** 2) right -= 1 return ans[::-1] ``` 最后是Leetcode 209题,题目要求在给定的数组中找到长度最小数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值