华为OD机考-C卷

news/2024/7/20 17:04:31 标签: 华为od, java

文章目录

  • 攀登者问题
  • 停车场
  • 最短路径

攀登者问题

24/03/09 20:50~23:10

攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。一个山脉可能有多座山峰(高度大于相邻位置的高度,或在地图边界且高度大于相邻的高度)。登山者想要知道一张地图中有多少座山峰。

例如[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0], 代表如下图所示的地图,地图中有两个山脉位置分别为 1,2,3,4,5和8,9,10,11,12,13,最高峰高度分别为 4,3。最高峰位置分别为3,10。

一个山脉可能有多座山峰(高度大于相邻位置的高度,或在地图边界且高度大于相邻的高度)。

java">    /**
     * 返回地图中山峰的数量
     *
     * @param hill_map int整型一维数组 地图数组(长度大于1)
     * @return int整型
     */
    public int count_peaks(int[] hill_map) {
        // write code here 双指针
        int result = 0;
        if (hill_map.length == 0) {
            return result;
        } else if (hill_map.length == 1) {
            return 1;
        }
        for (int i = 0; i < hill_map.length; i++) {
            if (i > 0 && i < hill_map.length - 1) {
                // 处理非边界元素
                if (hill_map[i] > hill_map[i - 1] && hill_map[i] > hill_map[i + 1]) {
                    result++;
                }
            } else if (i == 0 && hill_map[i] > hill_map[i + 1]) {
            	// 处理左边界元素
                result++;
            } else if (i == hill_map.length - 1 && hill_map[i] > hill_map[i - 1]) {
	            // 处理右边界元素
                result++;
            }
        }
        return result;
    }
// 100%

停车场

停车场有一横排车位,0代表没有停车,1代表有车。至少停了一辆车在车位上,也至少有一个空位没有停车为了防剐蹭,需为停车人找到一个车位,使得距停车人的车最近的车辆的距离是最大的,返回此时的最大距离。

  • 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。
  • 车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3),统计停车场最少可以停多少辆车,返回具体的数目。
    输入描述
    1.一个用半角逗号分割的停车标识字符串,停车标识为0或1,0为空位,1为已停车。
    2.停车位最多100个。
    输出描述
    最少可以停多少辆车

eg1:

  • 输入 1,0,1
  • 输出 2
  • 说明 1个小车占第1个车位,第二个车位空,1个小车占第3个车位,最少有两辆车

eg2:

  • 输入 1,1,0,0,1,1,1,0,1
  • 输出 3
  • 说明 1个货车占第1、2个车位;第3、4个车位空;1个卡车占第5、6、7个车位;第8个车位空;1个小车占第9个车位;最少3辆车
java">    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String carsLine = in.nextLine();
        int[] cars = new int[0];
        String[] split = carsLine.split(",");
        if (split.length > 0) {
            cars = new int[split.length];
            for (int i = 0; i < split.length; i++) {
                if (Objects.equals(split[i], "0") || Objects.equals(split[i], "1")) {
                    cars[i] = Integer.parseInt(split[i]);
                }
            }
        }
        int i = parkingCount(cars);
        System.out.println(i);
    }
    
    public static int parkingCount(int[] car) {
        int result = 0;
        int count = 0;
        for (int i = 0; i < car.length; i++) {
            if (car[i] == 1) {
            	// 记录停车位大小
                count++;
                if (count == 1) {
                	// 停车位大小为1,就可以停一辆车
                    result++;
                } else if (count == 3) {
                	// 停车位大小为3,到达最大车位,需要重新统计。
                    count = 0;
                }
            } else {
            	// 没有连续车位,停车位大小归0
                count = 0;
            }
        }
        return result;
    }
// 100%

最短路径

给定两个字符串,分别为字符串A与字符串B。例如A字符串为ABCABBA,B字符串为CBABAC。可以得到m*n的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,从原点(0,0)到(0,A)为水平边,距离为1,从(0,A)到(A,C)为垂直边,距离为1; 假设两个字符串同一位置的两个字符相同则可以作一个斜边、如(A.C)到.B)最短距离为斜边,距离同样为1。作出所有的斜边,则有(0.0)到(B.B)的距离为 1个水平边+1个垂直边+1个斜边 =3。
根据定义可知,原点到终点的最短距离路径如下图红线标记,最短距离为9;
路径为(0,0)->(A,0)->(A,C)->(B,B)->(C,B)->(A,A)->(B,B)->(B,B)->(A,A)->(A,C)

在这里插入图片描述
19% 没做出来


http://www.niftyadmin.cn/n/5430756.html

相关文章

mac启动elasticsearch

1.首先下载软件&#xff0c;然后双击解压&#xff0c;我用的是7.17.3的版本 2.然后执行如下命令 Last login: Thu Mar 14 23:14:44 on ttys001 diannao1xiejiandeMacBook-Air ~ % cd /Users/xiejian/local/software/elasticsearch/elasticsearch-7.17.3 diannao1xiejiandeMac…

【计算机基础】Cache工作原理是什么,为什么程序员无法调用?

文章目录 Cache的工作原理程序员无法调用Cache的原因计算机还有哪些东西是程序员无法调用的总结 在计算机系统中&#xff0c;Cache&#xff08;缓存&#xff09;扮演着至关重要的角色&#xff0c;它能够极大地提升数据访问的速度&#xff0c;从而改善程序的性能。 Cache的工作原…

redis如何保证缓存一致性

方式一&#xff1a;先更新数据库&#xff0c;再更新缓存场景 当有两个线程A、B&#xff0c;同时对一条数据进行操作&#xff0c;一开始数据库和redis的数据都为tony&#xff0c;当线程A去修改数据库&#xff0c;将tong改为allen&#xff0c;然后线程A在修改缓存中的数据&#x…

RockChip Android13 修改U盘挂载目录

环境:Android13 安卓默认U盘挂载目录为设备UUID,如下所示: /dev/block/vold/public:8,0 on /mnt/media_rw/1E46712C467105B5 type fuseblk (rw,dirsync,nosuid,nodev,noatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096) /dev/fuse on /mnt/user/…

并发编程之 sleep 与 yield的详细解析

3.7 sleep 与 yield sleep 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态&#xff08;阻塞&#xff09; 其它线程可以使用 interrupt 方法打断正在睡眠的线程&#xff0c;这时 sleep 方法会抛出 InterruptedException public static void main(String[] args) …

html--宠物

文章目录 htmljscss html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>CodePen - Spaceworm</title><script> window.requestAnimFrame (function() {return (window.requestAnimat…

【安全面试宝典】 面试宝典免费分享 面试注意点 附大纲 把握机会 赢得Offer

面试宝典V1.0 仔细阅读 把握机会 赢得Offer 1、 请你做一下自我介绍&#xff1f; 3 2、 你觉得你最大的优点是什么&#xff1f; 3 3、 说说你最大的缺点&#xff1f; 3 4、 你对加班的看法&#xff1f; 3 5、 如何安排自己的时间&#xff1f;会不会排斥加班&#xff1f; 3 6、 …

SpringMVC【框架】

为什么使用Spring ? 1). 方便解耦&#xff0c;简化开发 通过Spring提供的IoC容器&#xff0c;可以将对象之间的依赖关系交由Spring进行控制&#xff0c;避免硬编码所造成的过度程序耦合。 2). AOP编程的支持 通过Spring提供的AOP功能&#xff0c;方便进行面向切面的编程&a…