首页 > 其他分享 >面试经典 150 题 (十四)

面试经典 150 题 (十四)

时间:2024-02-07 16:11:18浏览次数:28  
标签:150 nums int ++ 面试 length answer new 十四

就用除法

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int[] answer = new int[nums.length];
        int sum = 1;
        int zeroNum = 0;
        for (int i = 0; i < nums.length; i++){
            if (nums[i] == 0) zeroNum++;
            sum *= nums[i];
            answer[i] = 0;//初始化
        }
        if (zeroNum >= 2){
            return answer;
        }else if(zeroNum == 1){
            sum = 1;
            for (int i = 0; i < nums.length; i++){
                if (nums[i] == 0){
                    for (int j = 0; j < nums.length; j++){
                        if (j != i){
                            sum *= nums[j];
                        }
                    }
                    answer[i] = sum;
                    break;
                }
            }
        }else{
            for (int i = 0; i < nums.length; i++){
                answer[i] = sum / nums[i];
            }
        }

        return answer;
    }
}

前缀、后缀

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int length = nums.length;
        int[] L = new int[length];  //存放对应元素左侧的乘积
        int[] R = new int[length];  //存放对应元素右侧的乘积
        int num = 1;
        L[0] = 1;
        for (int i = 1; i < length; i++){
            L[i] = L[i - 1] * nums[ i - 1];
        }
        num = 1;
        R[length - 1] = 1;
        for (int j = length - 2; j >= 0; j--){
            R[j] = R[j + 1] * nums[j + 1];
        }
        int[] answer = new int[length];
        for (int i = 0; i < length; i++){
            answer[i] = R[i] * L[i];
        }
        return answer;
    }
}

上述方法的改进,L R 和 answer可以公用一个数组,内存占用可以少个2M

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int length = nums.length;
        int[] L = new int[length];  //存放对应元素左侧的乘积
        //int[] R = new int[length];  //存放对应元素右侧的乘积
        int num = 1;
        L[0] = 1;
        for (int i = 1; i < length; i++){
            L[i] = L[i - 1] * nums[ i - 1];
        }
        num = 1;
        //R[length - 1] = 1;
        int Rtemp = 1;
        for (int j = length - 2; j >= 0; j--){
            //R[j] = R[j + 1] * nums[j + 1];
            Rtemp = Rtemp * nums[j + 1];
            L[j] *= Rtemp;
        }
        // int[] answer = new int[length];
        // for (int i = 0; i < length; i++){
        //     answer[i] = R[i] * L[i];
        // }
        return L;
    }
}

标签:150,nums,int,++,面试,length,answer,new,十四
From: https://www.cnblogs.com/poteitoutou/p/18011004

相关文章

  • 面试经典 150 题 (十三)
    先来个大的classRandomizedSet{privateHashSet<Integer>hashSet;publicRandomizedSet(){hashSet=newHashSet<Integer>();}publicbooleaninsert(intval){if(hashSet.contains(val)){returnfa......
  • 【面试突击】网络通信面试实战
    网络通信面试实战Socket工作原理Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,其实就是一个门面模式,将底层复杂的通信操作给封装起来对外提供接口。简单来说就是Socket把TPC/IP协议给封装了起来,我们的程序进行网络通信都是通过Socket来完成的!也就是说当......
  • 面试经典 150 题 (十二)
    排序,i代表至少发表的论文数量时间复杂度:O(nlogn)空间复杂度:O(logn)classSolution{publicinthIndex(int[]citations){//01356intlength=citations.length;Arrays.sort(citations);inth=0;for(inti=1......
  • 解锁阿里巴巴面试题:创建线程的几种方式?
    大家好,我是小米!今天我们来聊一个热门话题——阿里巴巴面试题:创建线程的几种方式。在技术的海洋中,线程是我们编程航程中的一艘不可或缺的船,驶向程序的未知领域。那么,究竟有哪些方式可以创建线程呢?让我们一起揭开这个技术的神秘面纱!实现Runnable接口首先,我们来说说最常见、最推荐的方......
  • C语言解题 || 公务员面试
    题目:公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最分和一个最低分,输出每组的平均成绩。(注:本题有多组输入)输入描述:每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。输出描述:每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位......
  • 代码随想录算法训练营第十四天| 理论基础 递归遍历 迭代遍历 统一迭代
    理论基础代码随想录(programmercarl.com)二叉树的链接形式定义(防忘)structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode(intx):val(x),left(NULL),right(NULL){}};额外补充(关于unordered_map和map)unordered_map和map类似,都是存储......
  • 代码随想录算法训练营第十四天 | 94. 二叉树的中序遍历,144.二叉树的前序遍历,145.二叉
    145.二叉树的后序遍历 已解答简单 相关标签相关企业 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例1:输入:root=[1,null,2,3]输出:[3,2,1]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1] 提示:树中节点......
  • 面试经典:Java中list set map之间的区别
    前言大家好,我是chowley,最近正在复习Java集合,这次来总结一下list、set、map它们三个之间的区别。1.List(列表)定义:List是一种有序集合,允许存储重复元素,每个元素都有一个索引,可以按照插入顺序获取。特点:允许存储重复元素。有序集合,保留元素的插入顺序。可以通过索引访问元素。常见实现......
  • 视觉slam十四讲 ch3 三维刚体运动
    视觉slam十四讲---CH3三维刚体运动三维刚体运动,即三维空间下的刚体的运动。刚体,是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。在运动过程中,机器人或者飞机和汽车的形变很小,可以近似看作刚体。三维刚体运动就是研究如何描述和表示一个刚体在......
  • 面试经典 150 题 (十一)
    classSolution{publicintjump(int[]nums){if(nums.length<=1)return0;//记录每次起跳所能跳到的最远的距离intfarestIndex=0;intmaxIndex=0;intstart=0;inttimes=0;while(true){......