华为1.24秋招笔试题

华为1.24秋招笔试题

1.题目1

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

1.1题解

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循环数组模板

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

  • 核心思想

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

2.题目2

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

image-20240130111240372

2.1思路分析

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

2.2代码

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


}

相关推荐

  1. 试题汇总】华为试题题解 2024-3-20

    2024-01-31 17:56:01       12 阅读
  2. 试题汇总】华为试题题解 2024-4-24

    2024-01-31 17:56:01       12 阅读
  3. 2024年数字IC-沐曦-GPU验证-试题

    2024-01-31 17:56:01       16 阅读
  4. 360春试题

    2024-01-31 17:56:01       19 阅读
  5. 试题汇总】华为笔试题解 2024-4-17

    2024-01-31 17:56:01       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-31 17:56:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-31 17:56:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-31 17:56:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-31 17:56:01       20 阅读

热门阅读

  1. 32.GitHub基础学习

    2024-01-31 17:56:01       35 阅读
  2. Kotlin开发中有关时间的具体使用

    2024-01-31 17:56:01       33 阅读
  3. Golang中的方法链

    2024-01-31 17:56:01       28 阅读
  4. 本周黄金价格将面临重大风险事件

    2024-01-31 17:56:01       42 阅读
  5. LRU(Least Recently Used)

    2024-01-31 17:56:01       33 阅读
  6. MySQL 索引 create index 详解

    2024-01-31 17:56:01       42 阅读
  7. linux nodejs无法安装canvas模块

    2024-01-31 17:56:01       32 阅读
  8. c#常用的修饰符

    2024-01-31 17:56:01       36 阅读
  9. C代码,控制亮灯的代码

    2024-01-31 17:56:01       32 阅读
  10. 马可波罗API中的item_get方法详解

    2024-01-31 17:56:01       46 阅读