---
# System prepended metadata

title: Weekly Contest 349
tags: [Weekly Contest]

---

###### tags: `Weekly Contest`
# Weekly Contest 349

## [2733. Neither Minimum nor Maximum](https://leetcode.com/problems/neither-minimum-nor-maximum/)(<font color=#00B8A3>Easy</font>)

限制 :

<ul>
<li><code>1 &lt;= nums.length &lt;= 100</code></li>
<li><code>1 &lt;= nums[i] &lt;= 100</code></li>
<li>All values in <code>nums</code> are distinct</li>
</ul>

### Solution
先找出最大值與最小值，再檢查陣列是否有既非最大值也非最小值的數。
#### 時間複雜度: $O(n)$

#### 空間複雜度: $O(1)$

程式碼:

```python=
class Solution:
    def findNonMinOrMax(self, nums: List[int]) -> int:
        maxx, minn = max(nums), min(nums)
        for num in nums:
            if num != maxx and num != minn:
                return num
        return -1
```

雞婆寫了一下C++的:

```c=
class Solution {
public:
    int findNonMinOrMax(vector<int>& nums) {
        auto max = max_element(nums.begin(), nums.end());
        auto min = min_element(nums.begin(), nums.end());
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i] != *min && nums[i] != *max)
            return nums[i];
        }
        return -1;
    }
};
```

## [2734. Lexicographically Smallest String After Substring Operation](https://leetcode.com/problems/lexicographically-smallest-string-after-substring-operation/)(<font color=#FFC011>Medium</font>)

限制 :

<ul>
<li><code>1 &lt;= s.length &lt;= 3 * 10<sup>5</sup></code></li>
<li><code>s</code> consists of lowercase English letters</li>
</ul>

### Solution
從字串的頭開始找，直到第一個是 $a$ 的 index，就是需要做 operation 的部分。注意有一個特例是全是 $a$ 的字串，那就只需要對最後一個 $a$ 做 operation 就好。
#### 時間複雜度: $O(n)$

#### 空間複雜度: $O(1)$

程式碼:

```c++=
class Solution {
public:
    string smallestString(string s) {
        bool flag = false;
        for(int i=0;i<s.size();i++){
            if(s[i] !='a'){
                while(i<s.size()&&s[i] !='a')
                    s[i++]--;
                flag=true;
                break;
            }
        }
        if(!flag)
            s[s.size()-1] = 'z';
        return s;
    }
};
```


## [2735. Collecting Chocolates](https://leetcode.com/problems/collecting-chocolates/)(<font color=#FFC011>Medium</font>)

限制 :

<ul>
<li><code>1 &lt;= nums.length &lt;= 1000</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= x &lt;= 10<sup>9</sup></code></li>
</ul>

### Solution
最多轉 $n-1$ 輪。

對於第 $k$ 輪，$nums[i]$ 的最佳買價是 $min(nums[i-k...i])$，注意這裡的陣列是循環陣列，也就是如果 $i-k < 0$，會自動替換成 $n + i - k$。

所以第 $k$ 輪的最佳解公式是 $所有nums[i]的最佳買價和 + x*k$。

計算出這 $n-1$ 輪每輪所對應的答案，其中最小者即是題目所求。
#### 時間複雜度: $O(n^2)$

#### 空間複雜度: $O(n^2)$

程式碼:

```c++=
class Solution {
    typedef long long ll;
public:
    long long minCost(vector<int>& nums, int x) {
        // n*minn + x*n-1
        // (n-1)*minn + x*n-2 +
        int n = nums.size();
        vector<vector<int> > dp(n, vector<int>(n, 2e9));
        for(int i=0;i<n;i++){
            for(int j=i, k=0;k<n;k++){
                dp[i][k] = k==0?nums[j]:min(dp[i][k-1], nums[j]);
                if(j==0){
                    j = n-1;
                }
                else {
                    j--;
                }
            }
        }
        
        long long ans = 1e18;
        for(int i=0;i<n;i++){
            long long sum = 0;
            for(int j=0;j<n;j++)
                sum+=dp[j][i];
            ans = min(ans, sum + ll(i)*x);
        }
        return ans;
    }
};
```


## [2736. Maximum Sum Queries](https://leetcode.com/problems/maximum-sum-queries/)(<font color=#FF375F>Hard</font>)

限制 :

<ul>
<li><code>nums1.length == nums2.length</code> </li>
<li><code>n == nums1.length </code></li>
<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums1[i], nums2[i] &lt;= 10<sup>9</sup> </code></li>
<li><code>1 &lt;= queries.length &lt;= 10<sup>5</sup></code></li>
<li><code>queries[i].length == 2</code></li>
<li><code>x<sub>i</sub> == queries[i][1]</code></li>
<li><code>y<sub>i</sub> == queries[i][2]</code></li>
<li><code>1 &lt;= x<sub>i</sub>, y<sub>i</sub> &lt;= 10<sup>9</sup></code></li>
</ul>

### Solution

#### 時間複雜度: $O()$

#### 空間複雜度: $O()$

程式碼:

```c++=

```

