###### tags: `BiWeekly Contest` # BiWeekly Contest 109 ## [2784. Check if Array is Good](https://leetcode.com/problems/check-if-array-is-good/) (<font color=#00B8A3>Easy</font>) 限制 : <ul> <li><code>1 <= nums.length <= 100</code></li> <li><code>1 <= num[i] <= 200</code></li> </ul> ### Solution #### 時間複雜度: $O(nlogn)$ #### 空間複雜度: $O(1)$ 程式碼: ```c++= class Solution { public: bool isGood(vector<int>& nums) { if(nums.size()==1) return false; sort(nums.begin(), nums.end()); int n = nums.size(); for(int i=0;i<n-1;i++){ if(nums[i] != i+1) return false; } if(nums.back() !=n-1) return false; return true; } }; ``` ## [2785. Sort Vowels in a String](https://leetcode.com/problems/sort-vowels-in-a-string/) (<font color=#FFC011>Medium</font>) 限制 : <ul> <li><code>1 <= s.length <= 10<sup>5</sup></code></li> <li><code>s consists only of letters of the English alphabet in uppercase and lowercase.</code></li> </ul> ### Solution #### 時間複雜度: $O(nlogn)$ #### 空間複雜度: $O(n)$ 程式碼: ```c++= class Solution { public: bool isvowel(char c){ return c=='a' || c=='e' || c=='i' || c=='o' || c=='u'; } string sortVowels(string s) { vector<char> pvec; vector<int> idx; for(int i=0;i<s.size();i++){ if(isvowel(tolower(s[i]))){ pvec.push_back(s[i]); idx.push_back(i); } } sort(pvec.begin(), pvec.end()); sort(idx.begin(), idx.end()); for(int i=0;i<pvec.size();i++){ s[idx[i]] = pvec[i]; } return s; } }; ``` ## [2786. Visit Array Positions to Maximize Score](https://leetcode.com/problems/visit-array-positions-to-maximize-score/)(<font color=#FFC011>Medium</font>) 限制 : <ul> <li><code>2 <= nums.length <= 10<sup>5</sup></code></li> <li><code>1 <= nums[i], x <= 10<sup>6</sup></code></li> </ul> ### Solution #### 時間複雜度: $O(n)$ #### 空間複雜度: $O()$ 程式碼: ```c++= class Solution { public: typedef long long ll; long long maxScore(vector<int>& nums, int x) { int n=nums.size(); vector<vector<ll> > dp(n, vector<ll>(2, -1e9)); dp[0][nums[0]%2] = nums[0]; for(int i=1;i<n;i++){ if(nums[i]%2==0){ dp[i][0] = max(dp[i-1][0]+nums[i], dp[i-1][1]+nums[i]-x); dp[i][1] = dp[i-1][1]; } else { dp[i][0] = dp[i-1][0]; dp[i][1] = max(dp[i-1][0]+nums[i]-x, dp[i-1][1]+nums[i]); } } return max(dp[n-1][0], dp[n-1][1]); } }; ``` ## [2787. Ways to Express an Integer as Sum of Powers](https://leetcode.com/problems/ways-to-express-an-integer-as-sum-of-powers/)(<font color=#FFC011>Medium</font>) 限制 : <ul> <li><code>1 <= n <= 300</code></li> <li><code>1 <= x <= 5</code></li> </ul> ### Solution #### 時間複雜度: $O(n^2)$ #### 空間複雜度: $O(n)$ 程式碼: ```c++= class Solution { public: const int MOD = 1e9+7; int numberOfWays(int n, int x) { vector<int> p; for(int i=1;pow(i,x)<=n;i++) p.push_back(pow(i,x)); vector<int> dp(n+1); dp[0] = 1; dp[p[0]] = 1; for(int i=1;i<p.size();i++){ vector<int> next = dp; for(int j=p[i];j<=n;j++) next[j] = (next[j]+dp[j-p[i]])%MOD; dp = next; } return dp[n]; } }; ```