ສ້າງ Array ດ້ວຍ Stack Operations Leetcode Solution


ລະດັບຄວາມຫຍຸ້ງຍາກ Easy
ຖາມເລື້ອຍໆໃນ ກູໂກ
Stack

ບັນຫາການກໍ່ສ້າງ Array ດ້ວຍການປະຕິບັດງານ Stack Leetcode Solution ໃຫ້ພວກເຮົາມີ integer sequence ແລະເລກ integer n. ບັນຫາລະບຸວ່າພວກເຮົາໄດ້ຮັບ ລຳ ດັບເລກເຕັມຈາກ 1 ເຖິງນ. ຫຼັງຈາກນັ້ນ, ພວກເຮົາໃຊ້ stack ເພື່ອຜະລິດລໍາດັບເລກເຕັມທີ່ຖືກມອບໃຫ້ພວກເຮົາເປັນວັດສະດຸປ້ອນ. ພວກເຮົາພຽງແຕ່ສາມາດໃຊ້ງານ“ Push” ແລະ“ Pop” ເພື່ອໃຫ້ໄດ້ຜົນຕາມ ລຳ ດັບ. ດັ່ງນັ້ນ, ໃຫ້ພວກເຮົາເບິ່ງຕົວຢ່າງສອງສາມຢ່າງກ່ອນທີ່ຈະກ້າວໄປຂ້າງຫນ້າກັບການແກ້ໄຂ.

ສ້າງ Array ດ້ວຍ Stack Operations Leetcode Solution

target = [1,3], n = 3
["Push","Push","Pop","Push"]

ຄໍາອະທິບາຍ: ການປະຕິບັດງານທີ່ໃຫ້ຢູ່ໃນຜົນຜະລິດສາມາດຖືກກວດສອບຕາມລໍາດັບຈາກ 1 ເຖິງ n (= 3). ຫນ້າທໍາອິດ, ພວກເຮົາຍູ້ຕົວເລກເຕັມຄັ້ງທໍາອິດ (= 1) ໄປຫາ stack. ຫຼັງຈາກນັ້ນນັບຕັ້ງແຕ່ພວກເຮົາບໍ່ສາມາດບໍ່ສົນໃຈກັບເລກເຕັມ (= 2), ພວກເຮົາຍູ້ມັນເຂົ້າໄປໃນຊັ້ນ, ຫຼັງຈາກນັ້ນກົດມັນ. ເພາະວ່າເລກເຕັມ 2 ບໍ່ຢູ່ໃນ ລຳ ດັບຜົນຜະລິດ. ໃນທີ່ສຸດ, ພວກເຮົາຍູ້ຕົວເລກທີສາມ (= 3) ເຂົ້າໃນຊັ້ນ. ດັ່ງນັ້ນຜົນຜະລິດທີ່ຕ້ອງການແມ່ນໄດ້ຮັບ.

target = [1,2,3], n = 3
["Push","Push","Push"]

ຄໍາອະທິບາຍ: ຍ້ອນວ່າພວກເຮົາມີຕົວເລກທັງ ໝົດ ຈາກລໍາດັບທີ່ໃຫ້ຈາກ 1 ເຖິງ n ໃນຊັ້ນ. ພວກເຮົາຍູ້ຕົວເລກທັງ ໝົດ ເຂົ້າໃນຂັ້ນໄດ. ດັ່ງນັ້ນພວກເຮົາມີ 3“ ຍູ້” ການ ດຳ ເນີນງານເປັນຜົນຜະລິດ.

ວິທີການໃນການສ້າງ Array ດ້ວຍ Stack Operations Leetcode Solution

ບັນຫາສ້າງ Array ດ້ວຍ Stack Operations Leetcode Solution, ດັ່ງທີ່ໄດ້ລະບຸໄວ້ກ່ອນ ໜ້າ ນີ້ຮຽກຮ້ອງໃຫ້ພວກເຮົາອອກຜົນງານທີ່ stack ຄວນປະຕິບັດເພື່ອຜະລິດຜົນທີ່ຕ້ອງການ. ຄຳ ຖາມແມ່ນການໂຄສະນາຢ່າງດຽວ. ແລະຮຽກຮ້ອງໃຫ້ພວກເຮົາສ້າງສູດການຄິດໄລ່ທີ່ສາມາດຊອກຫາການ ດຳ ເນີນງານຂອງກຸ່ມ.

ສຳ ລັບການແກ້ໄຂບັນຫາ, ພວກເຮົາສ້າງຕົວປ່ຽນແປງ“ should_ve” ທີ່ມີການເລີ່ມຕົ້ນດ້ວຍ 1. ຫຼັງຈາກນັ້ນ, ພວກເຮົາ ດຳ ເນີນການ ສຳ ລັບ loop ທີ່ເລີ່ມຕົ້ນຈາກ 1 ແລະກະຕຸ້ນຂະບວນການຂອງການປ່ຽນເສັ້ນທາງຈາກ 1 ເຖິງ n. ພວກເຮົາຮັກສາຕົວແປທີ່ຄວນ _ ເພື່ອຕິດຕາມການ ດຳ ເນີນງານຂອງ Push ແລະ Pop ສຳ ລັບອົງປະກອບທີ່ບໍ່ພົບສະຖານທີ່ຂອງພວກມັນໃນ ລຳ ດັບຜົນຜະລິດ. ດັ່ງນັ້ນ, ເພື່ອສະຫຼຸບລະບົບການຄິດໄລ່, ພວກເຮົາຍູ້ແຕ່ລະອົງປະກອບແຕ່ພຽງແຕ່ປ້ອນອົງປະກອບທີ່ພວກເຮົາບໍ່ຕ້ອງການ.

ລະຫັດ ສຳ ລັບສ້າງ Array ດ້ວຍ Stack Operations Leetcode Solution

ລະຫັດ C ++

#include <bits/stdc++.h>
using namespace std;

vector<string> buildArray(vector<int>& target, int n) {
    vector<string> output;
    int should_ve = 1;
    for(int i=1;i<=target.size();i++){
        if(target[i-1] != should_ve){
            int cnt = target[i-1]-should_ve;
            while(cnt--)
                output.push_back("Push"), output.push_back("Pop");
        }
        output.push_back("Push");
        should_ve = target[i-1] + 1;
    }

    return output;
}

int main(){
    vector<int> target = {1, 3};
    int n = 3;
    vector<string> output = buildArray(target, n);
    for(auto x: output)
        cout<<x<<" ";
}
Push Push Pop Push

ລະຫັດ Java

import java.util.*;
import java.lang.*;
import java.io.*;

class Main
{
  public static List<String> buildArray(int[] target, int n) {
        List<String> output = new ArrayList<String>();
        int should_ve = 1;
        for(int i=1;i<=target.length;i++){
            if(target[i-1] != should_ve){
                int cnt = target[i-1] - should_ve;
                while(cnt-- > 0){
                    output.add("Push");
                    output.add("Pop");
                }
            }
            output.add("Push");
            should_ve = target[i-1] + 1;
        }
        
        return output;
    }
    
  public static void main (String[] args) throws java.lang.Exception
  {
    int[] target = {1, 3};
    int n = 3;
    List<String> output = buildArray(target, n);
    for(String x: output)
      System.out.print(x+" ");
  }
}
Push Push Pop Push

ການວິເຄາະຄວາມສັບສົນ

ຄວາມສັບສົນເວລາ

ໂອ (N), ນັບຕັ້ງແຕ່ພວກເຮົາ traverse ໃນແຕ່ລະອົງປະກອບຈາກ 1 ເຖິງ n. ດັ່ງນັ້ນຄວາມສັບສົນຂອງເວລາແມ່ນເປັນເສັ້ນ.

ຄວາມສັບສົນໃນອະວະກາດ

ໂອ (N), ເນື່ອງຈາກວ່າພວກເຮົາຕ້ອງການໃຊ້ vector / array ລະດັບປານກາງເພື່ອເກັບຮັກສາຜົນຜະລິດ.