📜  Pratian Technologies 面试经历(1)

📅  最后修改于: 2023-12-03 14:45:38.719000             🧑  作者: Mango

Pratian Technologies 面试经历

公司介绍

Pratian Technologies 是一家技术服务提供商,总部位于印度班加罗尔。公司提供软件开发、测试、运维以及技术咨询等服务。其客户包括美国、欧洲、亚太等多个国家和地区的企业。

面试流程

我进行的是初试,面试官主要询问了我对编程的认识、对算法的理解以及我之前做过的项目等。具体流程如下:

  1. 简单自我介绍
  2. 编程基本功问答
  3. 算法问题
  4. 项目介绍

在面试过程中,面试官非常友善和耐心,提的问题也都很具体。

编程问题

面试官提了一道编程题,要求我用Java实现,题目如下:

有一个数组,包含n个整数,其中一个整数出现了奇数次,其他整数都是偶数次,请写出一个函数,找出这个整数。

最开始我想到了暴力解法,遍历整个数组,记录每个数出现的次数,最后找到出现奇数次的整数。然后面试官问我是否有更优解,我又想到了用异或位运算解决。

public int findOddNum(int[] nums) {
    int result = 0;
    for (int i = 0; i < nums.length; i++) {
        result ^= nums[i];
    }
    return result;
}
算法问题

面试官提了一道算法题,要求我用Java实现,题目如下:

有一个01矩阵,求出其中最大全1子矩阵的面积。

我之前没有做过这个题,于是面试官给了我一些提示,比如可以将问题转化为求出每一行中每个元素的高度。(这个问题我后来发现是有效的,可以参考这篇文章。)最后我写出了代码:

public int maxRectangle(int[][] matrix) {
    if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
        return 0;
    }
    int[] heights = new int[matrix[0].length];
    int maxArea = 0;
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix[0].length; j++) {
            heights[j] = matrix[i][j] == 0 ? 0 : heights[j] + 1;
        }
        maxArea = Math.max(maxArea, largestRectangleArea(heights));
    }
    return maxArea;
}

private int largestRectangleArea(int[] heights) {
    if (heights == null || heights.length == 0) {
        return 0;
    }
    int maxArea = 0;
    Stack<Integer> stack = new Stack<>();
    for (int i = 0; i <= heights.length; i++) {
        int h = i == heights.length ? 0 : heights[i];
        while (!stack.isEmpty() && h < heights[stack.peek()]) {
            int top = stack.pop();
            maxArea = Math.max(maxArea, heights[top] * (stack.isEmpty() ? i : i - stack.peek() - 1));
        }
        stack.push(i);
    }
    return maxArea;
}
总结

这次面试经历让我受益匪浅,不仅学到了一些新的算法,也巩固了编程基本知识。同时,我也感受到了 Pratian Technologies 对技术人才的重视和尊重,面试过程中始终保持着良好的态度和沟通。