首页 > 其他分享 >leetcode_打卡7

leetcode_打卡7

时间:2023-04-18 22:36:31浏览次数:46  
标签:乘积 nums int 元素 length 打卡 leetcode

leetcode_打卡7

题目:238. 除自身以外数组的乘积

思路:

image-20230418222134814

代码:

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n=nums.length;
        int sum=1,result=1;
        int j=0;
        int[] answer=new int[n];
        for(int i=0;i<n;i++){
            while(j<n){
                if(j==i){
                    j++;
                    continue;
                }
                else{
                    sum=sum*nums[j];
                    j++;
                }
            }
            answer[i]=sum;
            sum=1;
            j=0;
        }
        return answer;

    }
}

超时!!!

官方参考代码:

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int length = nums.length;

        // L 和 R 分别表示左右两侧的乘积列表
        int[] L = new int[length];
        int[] R = new int[length];

        int[] answer = new int[length];

        // L[i] 为索引 i 左侧所有元素的乘积
        // 对于索引为 '0' 的元素,因为左侧没有元素,所以 L[0] = 1
        L[0] = 1;
        for (int i = 1; i < length; i++) {
            L[i] = nums[i - 1] * L[i - 1];
        }

        // R[i] 为索引 i 右侧所有元素的乘积
        // 对于索引为 'length-1' 的元素,因为右侧没有元素,所以 R[length-1] = 1
        R[length - 1] = 1;
        for (int i = length - 2; i >= 0; i--) {
            R[i] = nums[i + 1] * R[i + 1];
        }

        // 对于索引 i,除 nums[i] 之外其余各元素的乘积就是左侧所有元素的乘积乘以右侧所有元素的乘积
        for (int i = 0; i < length; i++) {
            answer[i] = L[i] * R[i];
        }

        return answer;
    }
}

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/product-of-array-except-self/solution/chu-zi-shen-yi-wai-shu-zu-de-cheng-ji-by-leetcode-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:乘积,nums,int,元素,length,打卡,leetcode
From: https://www.cnblogs.com/ZLey/p/17331440.html

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:两数相除
    题目:给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和取余运算。整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345将被截断为8,-2.7335将被截断至-2。返回被除数 dividend 除以除数 divisor 得到的商。注意:假设我们的......
  • #yyds干货盘点# LeetCode面试题:删除有序数组中的重复项 II
    1.简述:给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。 说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数......
  • LeetCode:Search Algorithm
    LeetCode:SearchAlgorithm1\FirstuniquecharAlgorithmDesign利用字符数量的有限性,通过数组来映射(避免Hash_map的高复杂度)注意数组声明为intA[26]而不是charA[26];if(s=="")return''; intA[26]={0,0}; for(inti=0;i<s.length();i++){ A[s[i]-......
  • 每日打卡
    虚函数,纯虚函数不能直接定义对象,可以定义指针,但他的派生可以定义对象;注意最后一道题,纯虚数,派生的类仍为纯虚数,因为派生中没有将基类的全部纯虚数重新定义;a=d;*a=&d;&a=d;#include<iostream>usingnamespacestd;classpeople{protected:intage;stringname;......
  • leetcode-206反转链表
    反转链表方法一:迭代法/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,ListNode*next)......
  • 第三天打卡
    #include<iostream>usingnamespacestd;intmain(){intyear,mouth,day,x=0,i;inta[12]={31,28,31,30,31,30,31,31,30,31,30,31};scanf("%d%d%d",&year,&mouth,&day);if(year-1990<=2)x=(year-1990)*365+day;......
  • leetcode刷题随笔(1)
     11.盛水最多的容器暴力求解超时问题的解决intmaxArea(vector<int>&height){intmax=0;intn=height.size();intnum;inti,j;for(i=0;i<n;i++)for(j=0;j<n;j++){if(i<j)......
  • 每日打卡-7
    一.问题描述n个小伙伴(编号从0到n-1)围坐一圈玩游戏。按照顺时针方向给n个位置编号,从0到n-1。最初,第0号小伙伴在第0号位置,第1号小伙伴在第1号位置,……,依此类推。游戏规则如下:每一轮第0号位置上的小伙伴顺时针走到第m号位置,第1号位置小伙伴走到第m+1号位......
  • 编程打卡:C语言趣味编程习题做
    编程打卡:C语言趣味编程习题做存钱问题问题描述给定不同期限档次整存整取的月利率,期限和本金,求出使利息最大的存款方案。设计思路遍历每种可能的存钱方案,求出利息最大的方案,然后输出。流程图graphA[开始]-->B[定义各种各样的变量]-->C[遍历所有存款方案,保存利率最大的......
  • 每日打卡
    最佳存款问题:问题描述:银行一年零存整取的利率为0.63%某人手里有一笔钱,存入银行,他想每年取1000元,问他最开始存了多少钱问题分析:用逆向思路,从第五年末入手,第五年末正好取走最后1000元,所以第五年存款数为1000/(1+12*0.0063)则前四年亦是如此代码#include<stdio.h>main(){    ......