NC202582. 最大最小
描述
输入描述
给定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; } };