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


}
相关推荐
探索java5 分钟前
Tomcat Server 组件原理
java·后端·tomcat
勿在浮沙筑高台5 分钟前
无法获取实体类com.example.springdemo2.entity.po.UserPO对应的表名!
java·spring boot·mybatis
程高兴8 分钟前
遗传算法求解冷链路径优化问题matlab代码
开发语言·人工智能·matlab
wow_DG11 分钟前
【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
开发语言·c++·算法
用户83562907805126 分钟前
Java使用Spire.Doc实现Word转PDF:格式精准的自动化解决方案
java
陆小叁37 分钟前
基于Flink CDC实现联系人与标签数据实时同步至ES的实践
java·elasticsearch·flink
CHEN5_0239 分钟前
【Java基础】反射,注解,异常,Java8新特性,object类-详细介绍
java·开发语言
Cx330❀1 小时前
【数据结构初阶】--排序(四):归并排序
c语言·开发语言·数据结构·算法·排序算法
云间月13141 小时前
飞算JavaAI智慧文旅场景实践:从景区管理到游客服务的全链路系统搭建
java·开发语言
盖世英雄酱581361 小时前
必须掌握的【InheritableThreadLocal】
java·后端