2024华为 od 社招面试题

2024华为 od 社招面试题

今年的春招形式严峻,作者从去年底离职一直到今年4月初正式投递简历找工作,中间 gap 了3个月,到五一前拿到心仪的正式 offer,中间历时4个月。整个找工作的过程有着历时长、机会少、竞争激烈的特点,不过好事多磨总算是入职心仪的公司了。在这里秉着分享的精神,也为了更好地记录生活,今天记录下华为 OD 社招的面试过程,给大家的求职过程一些参考。
作者面试的岗位是安卓开发,考试的题库是 D 卷,应该是24年最新的题库。机试后两轮面试,作者加面一轮,不过那时入职新公司取消了三面。机试部分还是熟悉的三道大题,前两道各100分,最后一道200分,考试时间是150分钟。具体的题目我也记不清了,前面两道题目简单,对应 leetcode 上的简单难度。刷刷网上的华为真题差不多都能做出来。
之后的二面三面技术面都是上来甩一道笔试题,让面试者在本地的 ide 下敲代码,成功通过面试官给的几个测试用例即成功。笔试时间半个小时,过了之后问一些安卓Java 八股文。

一面:

实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须 原地 修改,只允许使用额外常数空间。

示例 1:
输入:nums = [1,2,3]
输出:[1,3,2]

示例 2:
输入:nums = [3,2,1]
输出:[1,2,3]

示例 3:
输入:nums = [1,1,5]
输出:[1,5,1]

示例 4:
输入:nums = [1]
输出:[1]
         
提示:
        1 <= nums.length <= 100
        0 <= nums[i] <= 100

代码

public class ForWork {
public static void main(String[] args) {
    System.out.println(Arrays.toString(ans(new int[]{3,2,1})));
}

public static int[] ans (int[] test){
    int n = test.length;
    boolean flag = false;
    //反向遍历数组,一旦找到满足 test[i] > test[i-1] 则交换位置,即可满足变成下一个更大排序
    for (int i = n-1;i >0;i--){
        if (test[i] > test[i -1]){
            int tem = test[i];
            test[i] = test[i-1];
            test[i-1] = tem;
            //找到下一个更大排序则把标志位赋值为 true
            flag = true;
            break;
        }
    }
    //如果没进行交换则把数组原地交换排序成最小排列,即升序
    if (!flag){
        int start = 0,end = n-1;
        while(start < end){
            int tem0 = test[start];
            test[start] = test[end];
            test[end] = tem0;
        }
    }
    return test;
}
}

二面

给定一个包含正整数的数组 nums ,返回可以组成三角形三条边的三元组个数,时间复杂度尽可能低。 triangleNumber({2,2,3,4})=3, triangleNumber({4,2,3,4})=4

public class ForWork {
public static void main(String[] args) {
    System.out.println(ans(new int[]{4,2,3,4}));
}
public static int ans(int[] test){
    //该题目的重点在于需要先对数组排序
    Arrays.sort(test);
    int count = 0;
    for (int i = 0;i < test.length-2;i++){
        //从小到大遍历,a 为三角形的一条短边
        int a = test[i];
        for (int j = i+1;j < test.length-1;j++){
        // b 为三角形的另一条短边 
            int b = test[j];
            for (int k = j +1;k < test.length;k++){
           		 //题目的另一个重点,组成三角形满足的条件——两条短边之和大于第三边
                if( test[k] < a +b){
                    count ++;
                }
            }
        }
    }
    return count;
}

三次便利时间复杂度 n*3,还能采用双指针继续优化,不过我当时没优化出来。
两个题目都不算难,大家平时有刷题目的话基本都没什么问题。现在的就业形势严峻,大家都困难,也希望我的记录能帮到大家。目前很多年轻人嘴上说着躺平,其实内心都比较焦虑,这种情况主要还是社会经济不景气,给到大家的压力太大了。不过找工作是一个双向匹配的过程,慢慢找总有一个岗位合适你。退一步讲,没有工作就会过不下去吗?工作只是生活的一部分,社会的不景气也只是暂时的。最后借用鲁迅先生的名言鼓励大家——愿中国青年都摆脱冷气,只是向上走,能做事的做事,能发声的发声。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值