LeetCode:統(tǒng)計(jì)最美子數(shù)組

1248. 統(tǒng)計(jì)「優(yōu)美子數(shù)組」

給你一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù) k。
如果某個(gè) 連續(xù) 子數(shù)組中恰好有 k 個(gè)奇數(shù)數(shù)字,我們就認(rèn)為這個(gè)子數(shù)組是「優(yōu)美子數(shù)組」。
請(qǐng)返回這個(gè)數(shù)組中「優(yōu)美子數(shù)組」的數(shù)目。
示例 1:
輸入:nums = [1,1,2,1,1], k = 3
輸出:2
解釋:包含 3 個(gè)奇數(shù)的子數(shù)組是 [1,1,2,1] 和 [1,2,1,1] 。
示例 2:
輸入:nums = [2,4,6], k = 1
輸出:0
解釋:數(shù)列中不包含任何奇數(shù),所以不存在優(yōu)美子數(shù)組。

思路:

構(gòu)建一個(gè)奇數(shù)數(shù)組,存儲(chǔ)原數(shù)組中奇數(shù)元素的位置。
那么以第i個(gè)奇數(shù)元素 為第一個(gè)奇數(shù)元素的 子數(shù)組的個(gè)數(shù)就等于 (第i個(gè)奇數(shù)元素的下標(biāo)-第i-1個(gè)奇數(shù)元素的下標(biāo))*(第i+k個(gè)奇數(shù)元素的下標(biāo)-第i+k-1個(gè)奇數(shù)元素的下標(biāo)).
所有子數(shù)組的個(gè)數(shù)就等于把奇數(shù)數(shù)組遍歷一次所求得的和,當(dāng)沒尚未遍歷過的奇數(shù)個(gè)數(shù)小于k時(shí),即可提前終止。

class Solution {
public:
    int numberOfSubarrays(vector<int>& nums, int k) {
        int num = 0;
        int size = nums.size();
        int *odd = new int[size + 2]; //可能全為奇數(shù),因此要申請(qǐng)size,又因?yàn)橐由项^尾的邊界,故size+2 。奇數(shù)元素比較少,元素總量又很多時(shí),用vector會(huì)比較好
        memset(odd, 0, sizeof(int)*(size+2));
        int index = 0;
        for (int i = 0; i < size; ++i)
        {
            if (nums[i] & 1)  //快速判斷是否為奇數(shù),最后一位和1相與
                odd[++index] = i; //從odd[1]開始
        }
        odd[0] = -1, odd[++index] = size; //邊界條件,根據(jù)實(shí)際加減推出
        for (int i = 1; i + k <= index; ++i) //構(gòu)造好邊界條件,可以統(tǒng)一于循環(huán)
        {
            num += (odd[i] - odd[i - 1]) * (odd[i + k] - odd[i + k - 1]);
        }
        return num;
    }
};

小知識(shí):

c++中不允許使用變量作為數(shù)組的長(zhǎng)度定義數(shù)組,當(dāng)長(zhǎng)度在運(yùn)行時(shí)才能確定,可以動(dòng)態(tài)申請(qǐng)內(nèi)存。

Type *p=new Type;
int *p=new int(2);//動(dòng)態(tài)分配一個(gè)int的空間并初始化為3
//一維數(shù)組申請(qǐng)
Type *p=new Type[n];
int *p=new int[5];
memset(p, 0, sizeof(int)*5); //初始化為0
//二維數(shù)組申請(qǐng)p[m][n];
Type **p=new Type*[m];
for(int i=0;i<m;++i)
{
    p[i]=new Type[n];
    memset(p[i], 0, sizeof(int)*n); //初始化為0
}

參考自:<https://blog.csdn.net/weixin_42638401/article/details/88957796>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,045評(píng)論 0 2
  • 數(shù)組在程序設(shè)計(jì)中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱...
    朱森閱讀 4,271評(píng)論 2 13
  • 排序算法幾種分類方式: 1,穩(wěn)定排序和不穩(wěn)定排序 如果a==b, 當(dāng)排序之前a在b的前面,排序后,a仍然在b...
    fly_ever閱讀 499評(píng)論 0 0
  • 動(dòng)態(tài)規(guī)劃 111. 爬樓梯思路類似斐波那契數(shù)列注意考慮第 0 階的特殊情況 272. 爬樓梯 II思路類似上題,只...
    6默默Welsh閱讀 2,603評(píng)論 0 1
  • 計(jì)算機(jī)二級(jí)C語言上機(jī)題庫(南開版) 1.m個(gè)人的成績(jī)存放在score數(shù)組中,請(qǐng)編寫函數(shù)fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,618評(píng)論 1 42

友情鏈接更多精彩內(nèi)容