Ditulis dalam C++, cari bilangan subarray yang jumlahnya kurang daripada K

WBOY
Lepaskan: 2023-09-07 15:25:02
ke hadapan
1445 orang telah melayarinya

Ditulis dalam C++, cari bilangan subarray yang jumlahnya kurang daripada K

Dalam siaran ini, kita akan mendapati bilangan subarray dengan jumlah kurang daripada K menggunakan C++. Dalam masalah ini, kita mempunyai array arr[] dan integer K. Sekarang kita perlu mencari subarray yang jumlahnya kurang daripada K. Di bawah ialah contoh −

Input : arr[] = {1, 11, 2, 3, 15}
K = 10
Output : 4
{1}, {2}, {3} and {2, 3}
Salin selepas log masuk

Cara untuk mencari penyelesaian

Sekarang kita akan menggunakan dua kaedah yang berbeza untuk menyelesaikan masalah yang diberikan -

Brute force

Dalam kaedah ini kita akan mengulangi semua sub tatasusunan dan Kira jumlahnya dan jika jumlahnya kurang daripada k, bandingkan dengan k untuk menambah jawapan kita.

Contoh

#include <bits/stdc++.h>
using namespace std;
int main(){
    int arr[] = {1, 11, 2, 3, 15}; // given array
    int k = 10; // given k
    int size = sizeof(arr) / sizeof(int); // size of our array.
    int ans = 0; // counter variable.
    for(int i = 0; i < size; i++){ // outer loop.
        int sum = 0;
        for(int j = i; j < size; j++){ // inner loop.
            sum = sum + arr[j];
            if(sum < k) // comparing with k.
               ans++; // incrementing our ans if sum is less than k.
        }
    }
    cout << ans << "\n";
    return 0;
}
Salin selepas log masuk

Output

4
Salin selepas log masuk
Salin selepas log masuk

Walau bagaimanapun, kaedah ini tidak begitu baik kerana kerumitan masanya sangat tinggi O(N*N), di mana n ialah saiz array.

Kami akan mencari penyelesaian alternatif menggunakan pendekatan tetingkap gelongsor (ini akan membantu kami mengurangkan kerumitan masa program).

Kaedah cekap

Tidak seperti brute force

kaedah cekap

kuat>, kami tidak mengulangi semua sub-array. Sebaliknya, hanya apabila jumlah subarray melebihi k , kami mengulang dan mengalihkan sempadan kiri ke sempadan kanan dan mengulangi sehingga keseluruhan tatasusunan dilalui.

Contoh

#include <bits/stdc++.h>
using namespace std;
int main(){
    int arr[] = {1, 11, 2, 3, 15}; // given array
    int k = 10; // given k
    int size = sizeof(arr) / sizeof(int); // size of our array.
    int ans = 0; // counter variable.
    int start = 0; // left border.
    int end = 0; // right border.
    int sum = 0;
    while(end < size && start < size){ // till the whole array is traversed.
        while(sum >= k && start < end){
           sum = sum - arr[start];
           start++;
        }
        if(end >= start)
           ans = ans + end - start;
        sum += arr[end];
        end++;
    }
    cout << ans << "\n";
    return 0;
}
Salin selepas log masuk

Output

4
Salin selepas log masuk
Salin selepas log masuk

Kami menggunakan Teknik Tingkap Gelongsor untuk menjadikan program kami lebih pantas atau lebih cekap apabila berhadapan dengan kekangan yang lebih besar.

Penjelasan kod di atas

Dalam pendekatan ini kita biasanya mengulang sehingga jumlah kita kurang daripada k dan menambah jawapan kita berdasarkannya, ini adalah perubahan utama dalam kod yang berlaku apabila jumlahnya lebih besar daripada atau sama dengan k . Dalam kes ini, kita mula menambah sempadan kiri kita sehingga ia kurang daripada atau sama dengan k atau jumlahnya lebih besar daripada atau sama dengan k. Apabila pemprosesan kami berjalan lebih jauh, ia berulang melalui subarray lain yang mungkin terbentuk. Jumlah subarray baharu ini kurang daripada k ditambah pada jawapan kami, jadi jawapan kami dinaikkan.

Berbanding dengan brute force solution sebelumnya, kaedah ini sangat cekap kerana kerumitan masanya ialah O(N), di mana N ialah saiz array kami.

Kesimpulan

Dalam artikel ini, kami menyelesaikan masalah mencari bilangan subarray yang jumlahnya kurang daripada k menggunakan teknik tingkap gelongsor. Kami juga mempelajari program C++ untuk masalah ini dan pendekatan lengkap kami untuk menyelesaikannya (kedua-dua remeh dan cekap). Kita boleh menulis program yang sama dalam bahasa lain seperti C, Java, Python dan lain-lain. Semoga artikel ini membantu anda.

Atas ialah kandungan terperinci Ditulis dalam C++, cari bilangan subarray yang jumlahnya kurang daripada K. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!