国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Leetcode 977-有序數(shù)組的平方 | LeetCode209-長度最小的子數(shù)組 | Leetcode59-螺旋矩陣

這篇具有很好參考價值的文章主要介紹了Leetcode 977-有序數(shù)組的平方 | LeetCode209-長度最小的子數(shù)組 | Leetcode59-螺旋矩陣。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Leetcode 977-有序數(shù)組的平方 | LeetCode209-長度最小的子數(shù)組 | Leetcode59-螺旋矩陣

Leetcode 977-有序數(shù)組的平方

  • 給你一個按 非遞減順序 排序的整數(shù)數(shù)組 nums,返回 每個數(shù)字的平方 組成的新數(shù)組,要求也按 非遞減順序 排序。

示例 1: 輸入:nums = [-4,-1,0,3,10] 輸出:[0,1,9,16,100] 解釋:平方后,數(shù)組變?yōu)?[16,1,0,9,100],排序后,數(shù)組變?yōu)?[0,1,9,16,100]

示例 2: 輸入:nums = [-7,-3,2,3,11] 輸出:[4,9,9,49,121]

方法一-雙指針法


class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
    int left = 0;
    int n = nums.size();
    int right = n-1;
    vector <int>result(n,0);              //  定義一個長度為nums.size()的動態(tài)數(shù)組
    while(left<=right)                               
    {
    if(nums[left] * nums[left]<nums[right] * nums[right])
    {
    result[n-1]=nums[right] * nums[right];     //比較前后倆個指針指向的值將大的數(shù)從后往前排
    n--;
    right--;
    }
    else
    {
     result[n-1]=nums[left] * nums[left];
     n--;
     left++;
    }
    }
    return result;
    }
};

思考:

  • 這個數(shù)組為有序數(shù)組,那么即使前面有負的,數(shù)組平方的最大值只能是在數(shù)組的倆端,不是在左邊就是右邊,不可能是在中間
    由此想到雙指針做法,left從前往后,right從后往前,將大的放在新創(chuàng)建數(shù)組的末端
    注意循環(huán)終止的條件,這邊left==right也是有意義的

方法二-暴力排序


class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        for (int i = 0; i < A.size(); i++) {
            A[i] *= A[i];
        }
        sort(A.begin(), A.end()); // 快速排序
        return A;
    }
};

LeetCode209-長度最小的整數(shù)組

給定一個含有 n 個正整數(shù)的數(shù)組和一個正整數(shù) target 。

找出該數(shù)組中滿足其和 ≥ target 的長度最小的 連續(xù)子數(shù)組 [numsl, numsl+1, …, numsr-1, numsr]
,并返回其長度。如果不存在符合條件的子數(shù)組,返回 0 。


輸入:target = 7, nums = [2,3,1,2,4,3]
輸出:2
解釋:子數(shù)組 [4,3] 是該條件下的長度最小的子數(shù)組。

方法一-暴力解法


class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
    int result = INT_MAX;         //INT32_MAX可以看成一個相當大的數(shù)
    int sum = 0;
    int sublength = 0;
    int n = nums.size();
    if(n==0) return 0;
    for(int i = 0;i<n;i++)      //i為最小子數(shù)組的起點
    {
    sum = 0;                //每次重新移動起點都要將sum賦值為0
        for(int j = i;j<n;j++)  //j為最小子數(shù)組的終點
        {
        sum += nums[j];
        if(sum>=target)             //當發(fā)現(xiàn)子序列超過sum的時候更新result
        {
        sublength = j-i+1;
        result = result <sublength ? result : sublength;
        break;              //找到最小子序列時跳出循環(huán)
        }
        }
    }
    return result == INT_MAX ? 0 : result;        //result沒有被賦值的話就返回0
    }
};
  • 思路:用倆個for循環(huán)尋找子列
  • INT_MAX = 2^31-1,INT_MIN= -2^31. 可以看出是一個相當大的數(shù)和一個相當小的數(shù),如果想要得到數(shù)組中最小值,可以先將最小值賦值為INT_MAX ;
    同理如果想要得到數(shù)組中最大值,可以先將最大值賦值為INT_MIN ;

方法二-滑動窗口


class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
    int result = INT_MAX;
    int sum = 0  ;//滑動窗口之和
    int sublength = 0; //滑動窗口的長度
    int i = 0; //滑動窗口的起始位置
    int n = nums.size();
    for(int j = 0; j<n;j++)
    {
    sum += nums[j];
    while(sum>=target)
    {
    sublength = j-i+1;
    result = result< sublength ? result :sublength;
    sum -= nums[i++];   //滑動指針 從sum中減去起始位置的值并且 移動起始位置
    }
    }
    return result==INT_MAX ? 0 : result;  //判斷是否能找到最小的子數(shù)組不能則返回0
    }
};

思路:
利用滑動窗口(起始就是雙指針)
for循環(huán)中遍歷的是 窗口末端位置。為什么只用一個for循環(huán)便利就能達到預(yù)期效果呢?這邊類似一個滑動的窗口,當窗口的末端位置向后移動時,滿足sum>=target的條件后就要將起始位置的指針移動,滿足條件的話不斷更新result的值,使其能成為最小的子序列。

Leetcode59-螺旋矩陣

給你一個正整數(shù) n ,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix 。文章來源地址http://www.zghlxwxcb.cn/news/detail-587776.html

示例
輸入:n = 3
輸出:[[1,2,3],[8,9,4],[7,6,5]]

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
    vector<vector<int>> res(n,vector<int>(n,0));    //使用vector定義一個二維數(shù)組
    int startx = 0,starty = 0; //定義每循環(huán)一個圈的起始位置
    int loop = n/2; //每個圈循環(huán)的次數(shù)
    int middle = n/2; //矩陣中間的位置
    int count = 1;  //給矩陣中每一個空格賦值
    int offset = 1; //勇于控制每一條邊遍歷的長度
    int i,j;
    while(loop--)
    {
    i = startx;
    j = starty;
    
        
        //四個for轉(zhuǎn)一圈
    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++;           //從第二圈開始起始位置都各自+1
    offset+=1;          //offset控制每一條邊遍歷的長度
    }
    if(n%2)
    {
        res[middle][middle]=count;  //如果n為奇數(shù)的話,需要單獨給矩陣最中間的值賦值
    }
        return res;
    }
};

  • 思路: 堅持循環(huán)不變量-每次循環(huán)里都要遵循同一套規(guī)則,必須保持一些變量的不可變。 這邊始終堅持左閉右開的原則
    —填充上行從左到右;填充右列從上到下;填充下行從右到左;填充左列從下到上

到了這里,關(guān)于Leetcode 977-有序數(shù)組的平方 | LeetCode209-長度最小的子數(shù)組 | Leetcode59-螺旋矩陣的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Day 2 數(shù)組:977.有序數(shù)組的平方 209.長度最小的子數(shù)組 59.螺旋矩陣Ⅱ

    Day 2 數(shù)組:977.有序數(shù)組的平方 209.長度最小的子數(shù)組 59.螺旋矩陣Ⅱ

    977.有序數(shù)組的平方 題目鏈接 ??思路 暴力解法 將數(shù)組內(nèi)每個數(shù)平方每個數(shù)平方之后,按升序排序 代碼如下: 時間復(fù)雜度: O ( ? n l o g n ) O( nlogn) O ( ? n l o g n ) 空間復(fù)雜度: O ( 1 ) O(1) O ( 1 ) 時間復(fù)雜度具體分析: for循環(huán): O(n) 快速排序 : O(nlogn) 因此時間復(fù)雜度是 O ( ?

    2024年02月10日
    瀏覽(50)
  • Day02 977.有序數(shù)組的平方 209.長度最小的子數(shù)組 59.螺旋矩陣II

    https://leetcode.cn/problems/squares-of-a-sorted-array/ 時間復(fù)雜度O(n) https://leetcode.cn/problems/minimum-size-subarray-sum/ 時間復(fù)雜度:O(n) 看每一個元素被操作的次數(shù),每個元素在滑動窗后進來操作一次,出去操作一次,每個元素都是被操作兩次,所以時間復(fù)雜度是 2 × n 也就是O(n)。 空間復(fù)雜度

    2023年04月18日
    瀏覽(17)
  • 代碼隨想錄第二天|977.有序數(shù)組的平方 209.長度最小的子數(shù)組 59.螺旋矩陣

    代碼隨想錄第二天|977.有序數(shù)組的平方 209.長度最小的子數(shù)組 59.螺旋矩陣

    第二天開始了, 一開始自己寫,就只想到了先一個個平方,再排序(甚至打算手寫排序循環(huán),后來才發(fā)現(xiàn)c++有自帶的排序函數(shù)sort(a.begin(),a.end()),c++真好,加油努力學(xué)習(xí)c++。 第二種方法然后看提示用雙指針也完全沒想出來,只能看文章了,淚 寫完發(fā)現(xiàn)代碼亂七八糟,要改。

    2024年02月13日
    瀏覽(26)
  • 算法訓(xùn)練 Day 2 | 數(shù)組:977.有序數(shù)組的平方,209.長度最小的子數(shù)組,59.螺旋矩陣II

    977. 有序數(shù)組的平方 第一想法:暴力破解 看完題解想法:朝著雙指針方向想 遇到困難: 用雙指針的話,一開始想到兩邊指針往中間靠,逐個將最大值賦給結(jié)果數(shù)組。和題解不同的是,循環(huán)條件我寫了? while (left != right) {...} ,相比于題解的? while (left = right) {...} ,我需要在后

    2023年04月12日
    瀏覽(29)
  • 代碼隨想錄Day02:977.有序數(shù)組的平方 ,209.長度最小的子數(shù)組 ,59.螺旋矩陣II

    977.有序數(shù)組的平方 【 題目建議 】: 本題關(guān)鍵在于理解雙指針思想 【隨想錄文章講解】 【卡哥視頻講解】 方法一:暴力排序法 **思路:**先對數(shù)組中每個數(shù)進行平方運算,然后再排序 時間復(fù)雜度是 O(n + nlogn) 其中包括計算平方數(shù)組的O(n)和快速排序的O(nlogn),總體上是O(nlo

    2023年04月27日
    瀏覽(26)
  • day2-數(shù)組part02| 977.有序數(shù)組的平方、 209.長度最小的子數(shù)組、 59.螺旋矩陣II

    數(shù)組平方后的最大值只可能在數(shù)組兩端,不可能在中間 設(shè)置雙指針,比較兩個指針所指值的大小,記錄較大值,接著向中間移動這個指針 結(jié)束條件:左右指針相背 暴力一直不過,明天再補一下 不斷的調(diào)節(jié)子序列的起始位置和終止位置,從而得出我們要想的結(jié)果。 思路 子數(shù)

    2024年02月02日
    瀏覽(19)
  • [自我記錄]隨想錄刷題第二天 | 977.有序數(shù)組的平方,209.長度最小的子數(shù)組,59.螺旋矩陣II

    ?代碼隨想錄打卡第二天, 新手自我記錄一下刷題歷程, 僅為自我打卡使用. 今天刷了三道主題, 第一道雙指針和第三道模擬做出來了, 第二道寫出了暴力解法但是提交leetcode超時了, 測試用例過了18/20, 看了carl哥答案以后自己重新補寫了滑動窗口方法. 977. 有序數(shù)組的平方 簡單題

    2024年02月05日
    瀏覽(25)
  • LeetCode每日一題【977. 有序數(shù)組的平方】

    LeetCode每日一題【977. 有序數(shù)組的平方】

    題目: 思路: 直接每個元素平方,然后排序,比較簡單 雙指針,一頭一尾,每次比較頭指針元素平方與尾指針元素平方的大小,若頭指針的元素平方比較大,則頭指針往后移動,否則尾指針往前移動

    2024年02月20日
    瀏覽(25)
  • Day2:(1)有序數(shù)組的平方(2)長度最小的子數(shù)(3)Leetcode 59螺旋矩陣II

    (1)解析 Leetcode977 參考文章 參考視頻 (2)思路 一開始考慮不采用新建一個新數(shù)組,在原數(shù)組上實現(xiàn)有序數(shù)組平方的排序,實現(xiàn)起來比較繁瑣,細節(jié)會有些小錯,后來采用新建數(shù)組的方式: 定義一個新數(shù)組resVec,和A數(shù)組一樣的大??;讓index指向resVec數(shù)組當前可插入元素的位

    2023年04月08日
    瀏覽(33)
  • 【LeetCode209】 長度最小的子數(shù)組

    滑動窗口型雙指針 給定一個含有 n 個正整數(shù)的數(shù)組和一個正整數(shù) target 。 找出該數(shù)組中滿足其總和大于等于 target 的長度最小的 連續(xù)子數(shù)組 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其長度。如果不存在符合條件的子數(shù)組,返回 0 。 示例 1: 輸入:target = 7, nums = [2,3,1,2,4,3] 輸出

    2024年01月23日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包