কম্পিউটার টিউটোরিয়াল

C++-এ টার্গেট কালারের ন্যূনতম দূরত্ব খুঁজুন


ধরুন আমাদের একটি color অ্যারে আছে যেখানে তিনটি রঙ: 1, 2 এবং 3। কিছু কুয়েরি দেওয়া আছে। প্রতিটি কুয়েরি দুটি ইন্টিজার i এবং c সম্বহ করে, আমাদের দেওয়া ইনডেক্স i এবং টার্গেট কালার c-এর মধ্যবর্তী ন্যূনতম দূরত্ব খুঁজে বের করতে হবে। যদি সমাধান না থাকে, তবে -1 রিটার্ন করুন। যেন colors অ্যারে [1,1,2,1,3,2,2,3,3], এবং queries অ্যারে [[1,3], [2,2], [6,1]], তবে আউটপুট হবে [3,0,3]। কারণ ইনডেক্স 1 থেকে নিকটতম 3 ইনডেক্স 4-এ (৩ স্টেপ দূরত্বে)। তারপর ইনডেক্স 2 থেকে নিকটতম 2 ইনডেক্স 2-এই (০ স্টেপ দূরত্বে)। এবং ইনডেক্স 6 থেকে নিকটতম 1 ইনডেক্স ৩-এ (৩ স্টেপ দূরত্বে)।

সমাধান পদ্ধতি

  • 4 সারির একটি ম্যাট্রিক্স index বানান, n := color অ্যারেতে উপাদান সংখ্যা
  • i = 0 থেকে n-1 পর্যন্ত লুপ চালান
    • i-কে index[colors[i]]-এ ইনসার্ট করুন
    • x := queries[i, 0] এবং c := queries[i, 1]
    • যদি index[c]-র আকার 0 হয়, তবে ret-এ -1 ইনসার্ট করুন এবং পরবর্তী ইটারেশনে যান
    • it := x-এর চেয়ে কম না হয় এমন প্রথম উপাদান - index[c]-র প্রথম উপাদান
    • op1 := infinity, op2 := infinity
    • যদি it = index[c]-র আকার, তবে it ১ কমানো, op1 := |x - index[c, it]|
    • অন্যথায় যখন it = 0, তবে op1 := |x - index[c, it]|
    • অন্যথায় op1 := |x - index[c, it]|, it ১ কমানো এবং op2 := |x - index[c, it]|
    • op1 এবং op2-এর ন্যূনতম ret-এ ইনসার্ট করুন
  • ret রিটার্ন করুন

উদাহরণ (C++)

নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝতে -

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class Solution { public:    vector<int> shortestDistanceColor(vector<int>& colors, vector<vector<int>>& queries) {       vector < vector <int> > idx(4);       int n = colors.size();       for(int i = 0; i < n; i++){           idx[colors[i]].push_back(i);       }       vector <int> ret;       for(int i = 0; i < queries.size(); i++){           int x = queries[i][0];           int c = queries[i][1];           if(idx[c].size() == 0){             ret.push_back(-1);             continue;           }           int it = lower_bound(idx[c].begin(), idx[c].end(), x) - idx[c].begin();           int op1 = INT_MAX;           int op2 = INT_MAX;           if(it == idx[c].size()){             it--;             op1 = abs(x - idx[c][it]);           }           else if(it == 0){             op1 = abs(x - idx[c][it]);           }           else{             op1 = abs(x - idx[c][it]);             it--;             op2 = abs(x - idx[c][it]);           }           ret.push_back(min(op1, op2));       }       return ret;    } }; int main(){    vector<int> v = {1,1,2,1,3,2,2,3,3};    vector<vector<int>> v1 = {{1,3},{2,2},{6,1}};    Solution ob;    print_vector(ob.shortestDistanceColor(v, v1)); }

ইনপুট

[1,1,2,1,3,2,2,3,3] [[1,3],[2,2],[6,1]]

আউটপুট

[3,0,3]

  1. OpenCV-এ C++ ব্যবহার করে রঙ ট্র্যাক করা

  2. C++-এ ম্যানহ্যাটান দূরত্ব সমান পথ সংখ্যা গণনা

  3. C++-এ ভালো নোডগুলোর মধ্যে সবচেয়ে ছোট দূরত্ব খুঁজে বের করা

  4. C++-এ static_cast