华为1.24秋招笔试题
1.题目1
题目详情 - 2024.1.24-华为秋招笔试-第一题-计算积分 - CodeFun2000
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(iint 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 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
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
task[i]=sc.nextInt(); l=Math.max(task[i],l); sum+=task[i]; } int r=sum; while(l 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; } }
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章