This shows you the differences between two versions of the page.
|
pa:laboratoare:laborator-00 [2025/02/24 22:52] radu.nichita |
pa:laboratoare:laborator-00 [2025/03/06 22:57] (current) darius.neatu [Exercitii] |
||
|---|---|---|---|
| Line 69: | Line 69: | ||
| Task-uri: | Task-uri: | ||
| - | * **Task00**: Citiți README de pe pagina principala [[https://github.com/acs-pa/pa-lab | pa-lab]]. Alegeți un limbaj de programare dintre C++ și Java și parcurgeți tutorialul aferent din [[https://github.com/acs-pa/pa-lab/tree/main/skel/lab00 | pa-lab::skel/lab00]]. | + | * **Task00**: Citiți README de pe pagina principala [[https://github.com/acs-pa/pa-lab | pa-lab]]. Alegeți un limbaj de programare dintre C++ și Java și parcurgeți tutorialul aferent din [[https://github.com/acs-pa/pa-lab/tree/main/skel/lab00 | pa-lab::skel/lab00]]. |
| + | * **Task01**: Se dă un vector cu n elemente și un număr k. Aflați al k-lea cel mai mare număr din vector. | ||
| + | * **Restricții**: | ||
| + | * $ 1 <= k <= n <= 10^5 $ | ||
| + | * Elementele vectorului au valori cuprinse între 0 și $ 10 ^ 9 $ | ||
| + | <note> | ||
| Ca să înțelegem cum ne dorim să procedăm la PA, următoarea problemă este rezolvată. Soluțiile pentru această problemă se pot încărca pe platforma [[https://leetcode.com/problems/kth-largest-element-in-an-array/description/ | Leetcode]]. | Ca să înțelegem cum ne dorim să procedăm la PA, următoarea problemă este rezolvată. Soluțiile pentru această problemă se pot încărca pe platforma [[https://leetcode.com/problems/kth-largest-element-in-an-array/description/ | Leetcode]]. | ||
| - | + | </note> | |
| - | * **Task01**: Se dă un vector cu n elemente și un număr k. Aflați al k-lea cel mai mare număr din vector. | + | |
| - | * **Restricții**: | + | |
| - | * $ 1 <= k <= n <= 10^5 $ | + | |
| - | * elementele vectorului au valori cuprinse între 0 și $ 10 ^ 9 $ | + | |
| <spoiler Soluția 1> | <spoiler Soluția 1> | ||
| Line 84: | Line 85: | ||
| <spoiler Soluția 1 implementată în C++> | <spoiler Soluția 1 implementată în C++> | ||
| <code cpp> | <code cpp> | ||
| - | class Solution { | + | class Solution { |
| - | public: | + | public: |
| - | int findKthLargest(vector<int>& nums, int k) { | + | int findKthLargest(vector<int>& nums, int k) { |
| - | std::sort(nums.begin(), nums.end()); | + | std::sort(nums.begin(), nums.end()); |
| - | return nums[nums.size() - k]; | + | return nums[nums.size() - k]; |
| - | } | + | } |
| - | }; | + | }; |
| </code> | </code> | ||
| </spoiler> | </spoiler> | ||
| Line 96: | Line 97: | ||
| <spoiler Soluția 1 implementată în Java> | <spoiler Soluția 1 implementată în Java> | ||
| <code java> | <code java> | ||
| - | class Solution { | + | class Solution { |
| - | public int findKthLargest(int[] nums, int k) { | + | public int findKthLargest(int[] nums, int k) { |
| - | Arrays.sort(nums); | + | Arrays.sort(nums); |
| - | return nums[nums.length - k]; | + | return nums[nums.length - k]; |
| - | } | + | } |
| - | } | + | } |
| </code> | </code> | ||
| </spoiler> | </spoiler> | ||
| Line 118: | Line 119: | ||
| 2. Pentru fiecare din elementele următoarele, dacă acesta este mai mare decât minimul din heap, se șterge minimul și se adaugă elementul curent. Mereu în heap avem k elemente la final de pas în această etapă. | 2. Pentru fiecare din elementele următoarele, dacă acesta este mai mare decât minimul din heap, se șterge minimul și se adaugă elementul curent. Mereu în heap avem k elemente la final de pas în această etapă. | ||
| - | 3. Răspunsul este minimul din heap la finalul parcurgerii. Complexitate este de $ O(n log k) $. | + | 3. Răspunsul este minimul din heap la finalul parcurgerii. |
| + | |||
| + | Complexitate este de $ O(n log k) $, care este mai bună. Implementați și testați pe Leetcode! | ||
| </spoiler> | </spoiler> | ||
| - | * **Task02**: Rezolvați problema [[https://leetcode.com/problems/sliding-window-maximum/| Sliding Window Maximum]]. | + | <spoiler Soluția 3> |
| + | Hint: Soluția 2 nu este optimă! Se poate și $O(n)$, dar considerăm că este înafara scopului laboratorului 0. | ||
| + | </spoiler> | ||
| - | * **Task03**: Rezolvați problema [[https://leetcode.com/problems/longest-substring-without-repeating-characters| Longest Substring without repeating characters]]. | + | * **Task02**: Discutați problema [[https://leetcode.com/problems/sliding-window-maximum/| Sliding Window Maximum]] și problema [[https://leetcode.com/problems/longest-substring-without-repeating-characters| Longest Substring without repeating characters]]. Implementați și testați cel puțin o problemă. |
| - | * **Task04**: Rezolvați problema [[https://leetcode.com/problems/min-stack/description/| Min Stack]]. | + | * **Task03**: Rezolvați problema [[https://leetcode.com/problems/min-stack/description/| Min Stack]]. |