首页 > 其他分享 >四 3745. 牛的学术圈 I (双指针|二分)

四 3745. 牛的学术圈 I (双指针|二分)

时间:2024-03-25 19:46:16浏览次数:41  
标签:二分 int 3745 mid a1 a2 static 指针

四 3745. 牛的学术圈 I (双指针|二分)
image

思路:要到达最大h指数,此时有a1篇引用大于等于h,a2篇引用等于h-1,且满足a1+min(a2, L)大于等于h,a1、a2可使用双指针分别获取,h则可使用二分法遍历减少耗时。

import java.util.*;

public class Main {
    private static int N, L;
    private static int[] a;

    private static boolean check(int mid) {
        int a1 = 0, a2 = 0;
        for (int i = 1; i <= N; i++) {
            if (a[i] >= mid) {
                a1++;
            }
            else if (a[i] == mid - 1) {
                a2++;
            }
        }
        return a1 + Math.min(a2, L) >= mid;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        L = sc.nextInt();
        a = new int[N + 2];
        for (int i = 1; i <= N; i++) {
            a[i] = sc.nextInt();
        }

        int left = 0, right = N;
        while (left < right) {
            int mid = left + right + 1 >> 1;
            if (check(mid)) {
                left = mid;
            }
            else {
                right = mid - 1;
            }
        }
        System.out.println(right);
    }
}

标签:二分,int,3745,mid,a1,a2,static,指针
From: https://www.cnblogs.com/he0707/p/18095134/lanqiaobei04

相关文章

  • 空指针、野指针和const修饰指针的区别
    关键:空指针和野指针都不允许访问,否则会报错。空指针指向变量中内存编号为0的空间用途1.初始化指针变量,并且空指针指向的内存不能进行解引用intmain(){ //指针变量p指向内存地址编号为0的空间 int*p=NULL; //访问空指针报错 //内存编号0~255为系统占用内......
  • c语言(1.指针、2.回调函数)实现简易计算器
    一级标题:简易计算器的实现。二级标题:代码中运用的知识在这里我会使用函数数组指针与回调函数分别写一份简易计算器的代码;那么函数数组指针与回调函数是什么呢?1、函数数组指针,形如intint(p[5])(int,int)的代码就是函数数组指针,p就是函数名,函数类型为int([])(int,int),其......
  • 一 503. 借教室 (差分|二分)
    503.借教室(差分|二分)importjava.util.*;publicclassMain{privatestaticintn,m;privatestaticint[]rooms;privatestaticint[][]orders;privatestaticbooleancheck(intmid){long[]diff=newlong[n+2];f......
  • 青蛙过河(前缀+二分)
    1importjava.util.*;23publicclassMain{4publicstaticvoidmain(String[]args){5Scannerscanner=newScanner(System.in);6intn=scanner.nextInt();7longx=scanner.nextLong();8//前缀和9lo......
  • 指针的大小判别;
    目录代码1:代码2:代码3:代码4:代码5:代码6:代码1:#include<stdio.h>intmain(){ inta[]={1,2,3,4}; printf("%d\n",sizeof(a));//16a是数组名;计算的是整个数组大小; printf("%d\n",sizeof(a+0));//4a+0是首元素地址; printf("%d\n",sizeo......
  • C++智能指针
    为什么需要智能指针对于普通指针,在程序结束前我们需要将每个指针都进行free,以免造成内存泄漏。但是手动释放指针是麻烦的,并且一旦漏掉就会造成内存泄漏。因此在C++11中引入智能指针避免此种情况的发生。智能指针包括std::shared_ptr/std::unique_ptr/std::weak_ptr,需要使用头文......
  • C++开发基础——指针与引用
    一,关于指针1.指针的基础概念指针是可存储地址的变量,存储在指针中的地址可以是变量或者其他数据的地址。指针不仅仅是指向某地址,指针还关注指向该地址的数据类型。例如:long*num_ptr{};这里的num_ptr指针今后只能存储long类型的变量地址,尝试用它存储非long类型的变量地址......
  • 指针的学习
    .指针:一个变量的地址指针变量:存放指针(变量地址)的变量& 取变量的地址单目运算符*取指针所指向变量的内容int*i_point,i; i=10; i_point=&i; printf("%x\n",&i);//变量对其取地址结果62fe14 printf("%x\n",&i_point);//对指针变量取地址,指针变量也需要空间存......
  • 蓝桥杯2017年第八届真题-分巧克力(二分算法)
    题目描述儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是HixWi的方格组成的长方形。为了公平起见,小明需要从这N块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:1.形状是正方形,边长是整数2.大......
  • 指向结构体类型数据的指针
    一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量.用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。1指向结构体变量的指针下面通过一个简单例子来说明指向结构体变量的指针变量的......