LeetCode 5369. Estadísticas número de unidad de combate (fuerza bruta)

1. Tema

n soldados de pie en una fila. Cada soldado tiene un único grado de la cuenta.

Cada tres soldados para formar una unidad de combate, agrupando las reglas son las siguientes:

  • índice seleccionado del equipo fueron tres soldados i, j, k, y sus resultados fueron rating[i]、rating[j]、rating[k]
  • Las unidades de combate deben cumplir: rating[i] < rating[j] < rating[k] 或者 rating[i] > rating[j] > rating[k]donde0 <= i < j < k < n

Por favor regresen las condiciones anteriores se pueden configurar de acuerdo con el número de unidades de combate. Cada soldado puede ser parte de múltiples unidades de combate.

示例 1:
输入:rating = [2,5,3,4,1]
输出:3
解释:我们可以组建三个作战单位 (2,3,4)(5,4,1)(5,3,1) 。

示例 2:
输入:rating = [2,1,3]
输出:0
解释:根据题目条件,我们无法组建作战单位。

示例 3:
输入:rating = [1,2,3,4]
输出:4
 
提示:
n == rating.length
1 <= n <= 200
1 <= rating[i] <= 10^5

Fuente: estancia botón (LeetCode)
enlace: https: //leetcode-cn.com/problems/count-number-of-teams
propiedad de la deducción de todas las redes. reimpresión comercial póngase en contacto con la reimpresión autorizada oficial, no comercial por favor indique la fuente.

2. Resolución de Problemas

solución de fuerza 2.1 bruta

  • Una pequeña cantidad de datos, la circulación directa de tres capas
class Solution {
public:
    int numTeams(vector<int>& rating) {
    	int i, j, k, sum = 0, n = rating.size();
    	for(i = 0; i < n-2; ++i)
    		for(j = i+1; j < n-1; ++j)
    			for(k = j+1; k < n; ++k)
    				if((rating[i] < rating[j] && rating[j] < rating[k])
    					 ||(rating[i] > rating[j] && rating[j] > rating[k]))
    					sum++;
    	return sum;
    }
};

140 ms 7,6 MB

optimización de la fuerza bruta 2.2

  • Encontrado sobre cada posición de la serie de grandes y pequeños de
  • sum += lsmall*rLarge + lLarge*rsmall
class Solution {
public:
    int numTeams(vector<int>& rating) {
    	int i, j, lsmall, lLarge, rsmall, rLarge, sum = 0, n = rating.size();
    	for(i = 1; i < n-1; ++i)
    	{
    		lsmall = lLarge = rsmall = rLarge = 0;
    		for(j = 0; j < i; ++j)
    		{
    			if(rating[j] < rating[i])
    				lsmall++;
    			if(rating[j] > rating[i])
    				lLarge++;
    		}
    		for(j = i+1; j < n; ++j)
    		{
    			if(rating[j] < rating[i])
    				rsmall++;
    			if(rating[j] > rating[i])
    				rLarge++;
    		}
    		sum += lsmall*rLarge + lLarge*rsmall;
    	}
    	return sum;
    }
};

8 ms 7,3 MB

Publicados 787 artículos originales · ganado elogios 1151 · Vistas de 310.000 +

Supongo que te gusta

Origin blog.csdn.net/qq_21201267/article/details/105176543
Recomendado
Clasificación