ホームページ  >  記事  >  バックエンド開発  >  以下を中国語に翻訳してください: 指定されたインデックスの左側にある 1 と 0 の数を答える C++ クエリ

以下を中国語に翻訳してください: 指定されたインデックスの左側にある 1 と 0 の数を答える C++ クエリ

王林
王林転載
2023-08-29 20:29:05590ブラウズ

将以下内容翻译为中文:C++ 查询以回答给定索引左侧的1和0的数量

特定の配列に関するクエリに答えるための質問について話し合います。たとえば、クエリ インデックスごとに、インデックスの左側にある 1 と 0 の数を見つける必要があります。

Input: arr[ ] = { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0}, queries[ ] = { 2, 4, 1, 0, 5 }
Output:
query 1: zeros = 1,ones = 1
query 2: zeros = 1,ones = 3
query 3: zeros = 1,ones = 0
query 4: zeros = 0,ones = 0
query 5: zeros = 2,ones = 3

Input: arr[ ] = { 0, 0, 1, 1, 1, 0, 1, 0, 0, 1 }, queries[ ] = { 3, 2, 6 }
Output:
query 1: zeros = 2,ones = 1
query 2: zeros = 2,ones = 0
query 3: zeros = 3,ones = 3

解決策を見つける方法

単純な方法

この問題を解決する簡単な方法は、クエリのインデックスまで配列を反復処理し、各要素をチェックすることです。 0 の場合はゼロ カウンタを 1 ずつインクリメントし、それ以外の場合はゼロ カウンタを 1 ずつインクリメントします。

#include <bits/stdc++.h>
using namespace std;
int main(){
    int nums[] = {1, 0, 0, 1, 1, 0, 0, 1, 0, 0};
    int queries[] =  { 2, 4, 1, 0, 5 };
    int qsize = sizeof(queries) / sizeof(queries[0]);
    int zeros=0,ones=0;
    // loop for running each query.
    for(int i = 0;i<qsize;i++){
        //counting zeros and ones
        for(int j = 0;j<queries[i];j++){
            if(nums[j]==0)
            zeros++;
            else
            ones++;
        }
        cout << "\nquery " << i+1 << ": zeros = " << zeros << ",ones = " << ones;
        zeros=0;
        ones=0;
    }
    return 0;
}

出力

query 1: zeros = 1,ones = 1
query 2: zeros = 2,ones = 2
query 3: zeros = 0,ones = 1
query 4: zeros = 0,ones = 0
query 5: zeros = 2,ones = 3

効率的な方法

前の方法では、毎回0番目のインデックスから開始して新しいクエリ1と0.

もう 1 つの方法は、最初に 0 と 1 を数える方法です。各インデックスの左側に表示され、それらを配列に格納し、クエリに記述されたインデックスに基づいて回答を返します。

#include <bits/stdc++.h>
using namespace std;
int main(){
    int nums[] = {1, 0, 0, 1, 1, 0, 0, 1, 0, 0};
    int queries[] =  { 2, 4, 1, 0, 5 };
    int n = sizeof(nums) / sizeof(nums[0]);
    int arr[n][2];
    int zeros = 0, ones = 0;
    // traverse through the nums array.
    for (int i = 0; i < n; i++) {
        // store the number of zeros and ones in arr.
        arr[i][0] = zeros;
        arr[i][1] = ones;
        // increment variable according to condition
        if (nums[i]==0)
            zeros++;
        else
            ones++;
    }
    int qsize = sizeof(queries) / sizeof(queries[0]);
        for (int i = 0; i < qsize; i++)
        cout << "\nquery " << i+1 << ": zeros = " << arr[queries[i]][0] << ",ones ="    << arr[queries[i]][1];
    return 0;
}

出力

query 1: zeros = 1,ones =1
query 2: zeros = 2,ones =2
query 3: zeros = 0,ones =1
query 4: zeros = 0,ones =0
query 5: zeros = 2,ones =3

結論

このチュートリアルでは、指定された配列内のすべてのクエリに残っているインデックスを返すことについて説明しました。そして0。私たちはこの問題を解決するための簡単で効果的な方法について話し合いました。この問題を解決するための C プログラムについても説明しました。C、Java、Python などのプログラミング言語を使用して実装できます。このチュートリアルがお役に立てば幸いです。

以上が以下を中国語に翻訳してください: 指定されたインデックスの左側にある 1 と 0 の数を答える C++ クエリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。