This shows you the differences between two versions of the page.
pa:laboratoare:laborator-00 [2025/02/24 22:48] 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> | ||
- | #include <algorithm> | + | 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> |
+ | </spoiler> | ||
+ | |||
+ | <spoiler Soluția 1 implementată în Java> | ||
+ | <code java> | ||
+ | class Solution { | ||
+ | public int findKthLargest(int[] nums, int k) { | ||
+ | Arrays.sort(nums); | ||
+ | return nums[nums.length - k]; | ||
+ | } | ||
+ | } | ||
</code> | </code> | ||
</spoiler> | </spoiler> | ||
Line 108: | 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]]. |