leetcode hot 17

解题思路:不允许用除法,所以可以考虑前缀和的思路。最终结果的任意一个索引对应的数都是nums数组对应索引左边所有数的乘积*右边所有数的乘积,所以先遍历两遍用两个数组记录,然后最后再相乘写入对应的索引的值。(可以更省空间的话就只在结果数组上操作,左边照常,右边的话用一个变量来表示乘积)

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int[] prenum =new int[nums.length];
        int[] revnum = new int[nums.length];
        int[] res = new int[nums.length];
        Arrays.fill(prenum,1);
        Arrays.fill(revnum,1);
        for(int i=0;i<nums.length;i++){
            if(i==0) prenum[i] = nums[i];
            else prenum[i] *= prenum[i-1] * nums[i];
        }
        for(int i=nums.length-1;i>-1;i--){
            if(i==nums.length-1) revnum[i] = nums[i];
            else revnum[i] *= revnum[i+1] * nums[i];
        }
        for(int i=0;i<nums.length;i++){
            if(i==0) res[i] = revnum[i+1];
            else if(i==nums.length-1) res[i] = prenum[i-1];
            else res[i] = prenum[i-1] * revnum[i+1];
        }
        return res;
    }
}
posted @   kukudev  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示