###### tags: `BiWeekly Contest` # BiWeekly Contest 110 ## [2806. Account Balance After Rounded Purchase](https://leetcode.com/problems/account-balance-after-rounded-purchase/) (<font color=#00B8A3>Easy</font>) 限制 : <ul> <li><code>0 <= purchaseAmount <= 100</code></li> </ul> ### Solution #### 時間複雜度: $O(1)$ #### 空間複雜度: $O(1)$ 程式碼: ```c++= class Solution { public: int accountBalanceAfterPurchase(int purchaseAmount) { purchaseAmount = ((purchaseAmount+5)/10) *10; return 100 - purchaseAmount; } }; ``` ## [2807. Insert Greatest Common Divisors in Linked List](https://leetcode.com/problems/insert-greatest-common-divisors-in-linked-list) (<font color=#FFC011>Medium</font>) 限制 : <ul> <li><code>The number of nodes in the list is in the range [1, 5000]. </code></li> <li><code>1 <= Node.val <= 1000</code></li> </ul> ### Solution #### 時間複雜度: $O(n)$ #### 空間複雜度: $O(1)$ 程式碼: ```c++= /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: int calculateGCD(int a, int b) { if(b) { return calculateGCD(b, a%b); } else return a; } ListNode* insertGreatestCommonDivisors(ListNode* head) { ListNode *ptr = head; ListNode *next_ptr = ptr -> next; while(next_ptr != nullptr) { int a = (ptr -> val), b = (next_ptr -> val); int val = calculateGCD(a, b); ListNode *temp = new ListNode(val); temp -> next = next_ptr; ptr -> next = temp; ptr = next_ptr; next_ptr = next_ptr -> next; } return head; } }; ``` ## [2808. Minimum Seconds to Equalize a Circular Array](https://leetcode.com/problems/minimum-seconds-to-equalize-a-circular-array)(<font color=#FFC011>Medium</font>) 限制 : <ul> <li><code>1 <= n == nums.length <= 10<sup>5</sup></code></li> <li><code>1 <= nums[i] <= 10<sup>9</sup></code></li> </ul> ### Solution - 這題我卡在這句 : <code>For every index i in the range [0, n - 1], replace nums[i] with either nums[i], nums[(i - 1 + n) % n], or nums[(i + 1) % n] </code> 這句的意思應該是將 nums[i] 不變、換成左邊或右邊的元素。 - 所以,照理來說就會是要去算要怎麼樣可以**用最快的速度將所有元素都變成同一個元素**。也就是說,假設例題1的這種情況,就會有 1 跟 2 兩個元素,要嘛就是將所有元素都變成 1 ,要嘛就是所有都變成 2。 - 參考資料 : [【每日一题】LeetCode 2808. Minimum Seconds to Equalize a Circular Array](https://www.youtube.com/live/aiUYZ7Kn5K8?feature=share) #### 時間複雜度: $O(n^2)$ #### 空間複雜度: $O(n)$ 程式碼: ```c++= class Solution { public: int minimumSeconds(vector<int>& nums) { unordered_map<int, vector<int>> Map; for(int i=0;i<nums.size();i++) { Map[nums[i]].push_back(i); } int n = nums.size(); int result = INT_MAX; for(auto& [key, arr]:Map) { arr.push_back(n + arr[0]); int d = 0; for(int i=0;i<arr.size()-1; i++) { d = max(d, (arr[i+1]-arr[i])/2); } result = min(result, d); } return result; } }; ``` ## [2809. Minimum Time to Make Array Sum At Most x](https://leetcode.com/problems/minimum-time-to-make-array-sum-at-most-x)(<font color=#FF375F>Hard</font>) 限制 : <ul> <li><code>1 <= nums1.length <= 10<sup>3</sup></code></li> <li><code>1 <= nums1[i] <= 10<sup>3</sup></code></li> <li><code>0 <= nums2[i] <= 10<sup>3</sup></code></li> <li><code>nums1.length == nums2.length </code></li> <li><code>0 <= x <= 10<sup>6</sup></code></li> </ul> ### Solution #### 時間複雜度: $O()$ #### 空間複雜度: $O()$ 程式碼: ```c++= ```