列表

详情


NC202582. 最大最小

描述

牛妹有一个数组array,她想知道里面有多少个区间满足区间最大值大于等于区间最小值的两倍。返回满足条件的区间个数。

输入描述

给定Array数组 

示例1

输入:

[1,2]

输出:

1

说明:

只有区间[1,2]满足

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Go(1.14.4) 解法, 执行用时: 109ms, 内存消耗: 37608K, 提交时间: 2020-08-02 16:55:22

package main

import (
	"math/bits"
	"sort"
)

// github.com/EndlessCheng/codeforces-go
func MaxMin(a []int) int64 {
	type pair struct{ x, y int }
	n := len(a)
	st := make([][17]pair, n)
	for i, v := range a {
		st[i][0] = pair{v, v}
	}
	for j := 1; 1<<j <= n; j++ {
		for i := 0; i+1<<j <= n; i++ {
			st[i][j].x = min(st[i][j-1].x, st[i+1<<(j-1)][j-1].x)
			st[i][j].y = max(st[i][j-1].y, st[i+1<<(j-1)][j-1].y)
		}
	}
	s := 0
	for r := 1; r <= n; r++ {
		s += sort.Search(r, func(l int) bool {
			k := bits.Len(uint(r-l)) - 1
			x, y := st[l][k], st[r-1<<k][k]
			return max(x.y, y.y) < min(x.x, y.x)<<1
		})
	}
	return int64(s)
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

Java(javac 1.8) 解法, 执行用时: 6207ms, 内存消耗: 29952K, 提交时间: 2021-04-02 23:46:39

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型一维数组 array
     * @return long长整型
     */
    public long MaxMin (int[] nums) {
        // write code here
        long res = 0;
        long n = nums.length;
        for (int j = 0; j < n; j++) {
            long mx = nums[j], mn = nums[j];
            for (int i = j - 1; i >= 0; i--) {
                mx = Math.max(mx, nums[i]);
                mn = Math.min(mn, nums[i]);
                if (mx >= 2 * mn) res++;
            }
        }
        return res;
    }
}

C++11(clang++ 3.9) 解法, 执行用时: 39ms, 内存消耗: 5024K, 提交时间: 2020-08-09 18:48:27

class Solution
{
	public:
		long long MaxMin(int *a,int n)
		{
			long long ans=0;
			for(int i=0;i<n;i++)
			{
				int mi=1e9+1,mx=0;
				for(int j=i;j<n;j++)
				{
					mi=min(mi,a[j]);
					mx=max(mx,a[j]);
					if(mx>=2*mi)
					{
						ans+=n-j;
						break;
					}
				}
			}
			return ans;
		}
};

上一题