华为1.24秋招笔试题

华为1.24秋招笔试题

1.题目1

题目详情 - 2024.1.24-华为秋招笔试-第一题-计算积分 - CodeFun2000

1.1题解

java 复制代码
import java.util.Scanner;

class Main{
     public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String s=sc.next();
        char[] ch=s.toCharArray();
        int res=0;
        int i=0;
        int n=ch.length;
        while(i<n){
            int start=i;
            if(ch[i]=='r')res+=1;
            else if(ch[i]=='g')res+=2;
            else if(ch[i]=='b')res+=3;
            i++;
            while(i<n && ch[i]==ch[i-1]){
                 if(ch[i]=='r')res+=1;
                else if(ch[i]=='g')res+=2;
                else if(ch[i]=='b')res+=3;
                res+=(i-start);
                i++;
            }
        }
        System.out.println(res);




 }


}

1.2循环数组模板

  • 适用场景:需要对分段多数组中的多个子数组分段处理,每一段处理逻辑相同

  • 核心思想

    • 外层负责遍历组之前的准备工作,记录开始位置,更新答案
    • 内层负责遍历,找出这一组最远在哪结束
java 复制代码
int n = nums.length;
int i = 0;
while (i < n){
    start = i//外层
  
       //内层 
       while (i < n && ...){
     i += 1;
  
    }
   
        }

2.题目2

题目详情 - 2024.1.24-华为秋招笔试-第二题-大模型训练 - CodeFun2000

2.1思路分析

  • 这道题与lc 410 分割数组最大值一样,只不过进行了包装而已
  • 贪心+二分
  • 我们这里使用二分搜索算力的最低值 UP
    • up值越小,段数越多,时间越长;反之越少,时间越短
    • 如果在up的情况下,贪心划分出的段数小于 T 说明还可以继续降低up
    • 否则 需要增加up

2.2代码

java 复制代码
import java.util.*;

class Main{
    static int t;
     public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        t=sc.nextInt();
        int[] task=new int[n];
        int sum=0;
        int l=0;
        for(int i=0;i<n;i++){
            task[i]=sc.nextInt();
            l=Math.max(task[i],l);
            sum+=task[i];
        }
        
        int r=sum;
        while(l<r){
            int mid=l+r>>1;
            if(check(task,mid)){
                r=mid;
            }else l=mid+1;
            
        }
        System.out.println(l);




 }
   //贪心划分模板可以记一下
 static boolean check(int[] nums,int up){
        int cnt=1;//至少可以划分为1份
        int sum=0;
        for(int num:nums){
            if(sum+num>up){
                cnt++;
                sum=num;
            }else{
                sum+=num;
            }
        }
        return cnt<=t;
        
    }


}
相关推荐
han_hanker2 分钟前
@Validated @Valid 用法
java·spring boot
小CC吃豆子4 分钟前
详细介绍一下静态分析工具 SonarQube
java
DevOpenClub7 分钟前
全国三甲医院主体信息 API 接口
java·大数据·数据库
不爱吃糖的程序媛8 分钟前
深入理解鸿蒙PC 三方库构建系统中的HPKCHECK文件
华为·harmonyos
上海合宙LuatOS13 分钟前
LuatOS扩展库API——【exremotecam】网络摄像头控制
开发语言·网络·物联网·lua·luatos
言慢行善15 分钟前
SpringBoot中的注解介绍
java·spring boot·后端
一勺菠萝丶17 分钟前
管理后台使用手册在线预览与首次登录引导弹窗实现
java·前端·数据库
feng_you_ying_li18 分钟前
C++11,{}的初始化情况与左右值及其引用
开发语言·数据结构·c++
xiaotao13126 分钟前
JS new 操作符完整执行过程
开发语言·前端·javascript·原型模式
TE-茶叶蛋30 分钟前
结合登录页-PHP基础知识点解析
android·开发语言·php