20201125: abrocha el 216 ° partido semanal (parte 2)

El Concurso Semanal 216 (Parte 2)

tema

  1. El número de esquemas para generar una matriz equilibrada.
    Inserte la descripción de la imagen aquí
  2. Energía inicial mínima para completar todas las tareas
    Inserte la descripción de la imagen aquí

Ideas y algoritmos

  1. En la primera pregunta, el índice eliminado es i. Después de la eliminación, la suma de paridad de las submatrices entre (0-i-1) permanece sin cambios y el índice de paridad de (i + 1, end) se intercambia
  2. Codiciosos más clasificación personalizada, el código se refiere a la solución de God Zero.

Código

  1. El número de esquemas para generar una matriz equilibrada.
class Solution {
    
    
    public int waysToMakeFair(int[] nums) {
    
    
        // 删除的索引为i,删除之后(0- i-1)之间的子数组的奇偶和不变,而(i+1,end)的奇偶索引交换
        int OddSum = 0;int EvenSum = 0;
        int leftOddSum = 0; int leftEvenSum = 0;
        int rightOddSum = 0;int rightEvenSum = 0;

        int res = 0;
        int len = nums.length;

        // 先计算当前奇偶索引和
        for (int i = 0; i < len; i++) {
    
    
            if(i % 2 == 0) 
                EvenSum += nums[i];
            else 
                OddSum += nums[i];
        }
        // 遍历所有可能性
        for (int i = 0; i < len; i++) {
    
    
            // 先计算左边的奇偶和
            if (i % 2 != 0) 
                leftOddSum += nums[i];
            else
                leftEvenSum += nums[i];
                
            rightOddSum = EvenSum - leftEvenSum;
            rightEvenSum = OddSum - leftOddSum;
            if (i % 2 != 0) 
                rightOddSum -= nums[i];
            else
                rightEvenSum -= nums[i];
            if ((leftEvenSum + rightEvenSum) == (leftOddSum + rightOddSum)) {
    
    
                res++;
            }
        }

        return res;

    }
}
  1. Energía inicial mínima para completar todas las tareas
class Solution {
    
    
public:
    int minimumEffort(vector<vector<int>>& tasks) {
    
    
        sort(tasks.begin(), tasks.end(), [](const vector<int> &a, const vector<int> &b) {
    
     return a[1] - a[0] > b[1] - b[0]; } );
        int ans = 0;       // 最低能量
        int cur_cost = 0;  // 实际能量
        for (int i = 0; i < tasks.size(); i++) {
    
    
            ans = max(ans, cur_cost + tasks[i][1]);
            cur_cost += tasks[i][0];
        }
        return ans;
    }

};

Escribir al final

  1. ¡Prisa!

Supongo que te gusta

Origin blog.csdn.net/qq_36828395/article/details/110154469
Recomendado
Clasificación