不是华为目标院校,直接被华为判死刑。。。

科技   2024-10-17 10:10   上海  

精品推荐

《征服数据结构》专栏:50多种数据结构彻底征服

《经典图论算法》专栏:50多种经典图论算法全部掌握


一网友投了华为的软件工程师,投了之后就没有反应了,联系HR也不回复,后来通过打听得知该网友所在学校不是华为的目标院校。原来大厂招聘都有目标院校,如果不是目标院校是不是简历都过不了?






--------------下面是今天的算法题--------------


来看下今天的算法题,这题是LeetCode的第238题:除自身以外数组的乘积。


问题描述



来源:LeetCode第238题
难度:中等

给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据保证数组 nums 之中任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例1:

输入: nums = [1,2,3,4]

输出: [24,12,8,6]

示例2:

输入: nums = [-1,1,0,-3,3]

输出: [0,0,9,0,0]


  • 2 <= nums.length <= 10^5

  • -30 <= nums[i] <= 30

  • 保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内


问题分析



这题让计算数组中每个位置的值是其他所有元素的乘积,但不能使用除法。我们可以先计算每个位置左边所有元素的乘积,然后再计算右边所有元素的乘积,那么当前位置的值就是左边所有元素的乘积与右边所有元素乘积的积,如下图所示。


JAVA:
public int[] productExceptSelf(int[] nums) {
    int length = nums.length;
    int[] res = new int[length];
    res[0] = 1;
    // 先计算当前位置左边所有元素的乘积。
    for (int i = 1; i < length; i++)
        res[i] = res[i - 1] * nums[i - 1];

    int right = 1;// 当前位置右边所有元素的乘积。
    // 左边和右边的乘积就是当前位置的值。
    for (int i = length - 1; i >= 0; i--) {
        res[i] *= right;
        right *= nums[i];
    }
    return res;
}

C++:
public:
    vector<intproductExceptSelf(vector<int>& nums) {
        int length = nums.size();
        vector<intres(length);
        res[0] = 1;
        // 先计算当前位置左边所有元素的乘积。
        for (int i = 1; i < length; i++)
            res[i] = res[i - 1] * nums[i - 1];

        int right = 1;// 当前位置右边所有元素的乘积。
        // 左边和右边的乘积就是当前位置的值。
        for (int i = length - 1; i >= 0; i--) {
            res[i] *= right;
            right *= nums[i];
        }
        return res;
    }

Python:
def productExceptSelf(self, nums: List[int]) -> List[int]:
    length = len(nums)
    res = [0] * length
    res[0] = 1
    # 先计算当前位置左边所有元素的乘积。
    for i in range(1, length):
        res[i] = res[i - 1] * nums[i - 1]

    right = 1  # 当前位置右边所有元素的乘积。
    # 左边和右边的乘积就是当前位置的值。
    for i in range(length - 1-1-1):
        res[i] *= right
        right *= nums[i]
    return res


笔者简介
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档


《征服数据结构》专栏

数组稀疏表(Sparse Table)单向链表双向链表块状链表跳表队列和循环队列双端队列单调队列单调栈双端栈散列表字典树(Trie树)ArrayMapSparseArray二叉树二叉搜索树(BST)笛卡尔树AVL树树堆(Treap)FHQ-Treap哈夫曼树滚动数组差分数组LRU缓存LFU缓存

……


《经典图论算法》专栏

图的介绍图的表示方式邻接矩阵转换广度优先搜索(BFS)深度优先搜索(DFS)A*搜索算法迭代深化深度优先搜索(IDDFS)IDA*算法双向广度优先搜索迪杰斯特拉算法(Dijkstra)贝尔曼-福特算法(Bellman-Ford)SPFA算法弗洛伊德算法(Floyd)卡恩(Kahn)算法基于DFS的拓扑排序约翰逊算法(Johnson)

……

数据结构和算法
王一博,《算法秘籍》作者,1000多页的pdf算法题我也已经整理完成,在公众号“数据结构和算法”中回复关键字“pdf”即可下载。
 最新文章