华为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;
        
    }


}
相关推荐
郑州光合科技余经理43 分钟前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
萧瑟余晖1 小时前
Java深入解析篇三十三之密封类与接口(Sealed Classes)详解
java·开发语言
论迹复利5 小时前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
张宇Joaquin5 小时前
鲲鹏统一并行加速库KUPL--众核并行能力介绍
java·开发语言·网络
736c5 小时前
C语言-数组 07
c语言·开发语言
宸津-代码粉碎机5 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
2601_963749106 小时前
越华环保集团数字化污水治理:端边云采集架构与平台对接实现
java·大数据·架构
xcLeigh7 小时前
Go入门:整数类型的溢出与安全边界
java·安全·golang
LorryJovens7 小时前
【LAAP科研】CEN因果等价网络理论---从双缝干涉到因果等价
开发语言·php
源码宝7 小时前
SpringBoot+Vue2 诊所门诊管理系统,完整前后端源码,可直接部署上线
java·源码·his系统·门诊系统·程序代码·诊所系统·门诊his