力扣刷题详解(含代码动态展示)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣刷题详解(含代码动态展示)相关的知识,希望对你有一定的参考价值。

(文章目录)

一、448. 找到所有数组中消失的数字

1.完整过程动态展示

2.代码实现

int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) 
    int* ptr = (int*)malloc(sizeof(int) * numsSize);
    int index = 0;
    int noindex = 0;
    while (index < numsSize)
    
        if (nums[index] == index + 1)//判断是否与下标+1相等
        
            index++;
        
        else
        
            noindex = nums[index] - 1;
            if (nums[noindex] == nums[index])//如果当前下标的数与
            //与对应位置的数相等
            
                index++;
                continue;
            
            int tmp = nums[noindex];//不相等就交换
            nums[noindex] = nums[index];
            nums[index] = tmp;
        
    
    int i = 0;
    int n = 0;
    for (i = 0; i < numsSize; i++)
    
      if (nums[i] != i + 1)
        
            ptr[n] = i + 1;
            n++;
        
    
    *returnSize = n;
    return ptr;

3.思路分析

二、238. 除自身以外数组的乘积

1.代码实现

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* productExceptSelf(int* nums, int numsSize, int* returnSize)
    int i=0;
    int*ptr=(int*)malloc(sizeof(int)*(numsSize));
    int left[numsSize];
    int right[numsSize];
    left[0]=1;//默认左缀之和的第一个数为1
    for(i=1;i<numsSize;i++)//左缀之和
    
        left[i]=left[i-1]*nums[i-1];
    
    right[numsSize-1]=1;//默认右缀之和的右边第一个数为1
    for(i=numsSize-2;i>=0;i--)//右缀之和
    
        right[i]=right[i+1]*nums[i+1];
    
    int index=0;
    for(i=0;i<numsSize;i++)//将左右缀之和相乘 
    
        ptr[index]=left[i]*right[i];
        index++;
    
    *returnSize=index;
    return ptr;


2. 过程

以上是关于力扣刷题详解(含代码动态展示)的主要内容,如果未能解决你的问题,请参考以下文章

力扣刷题—两数之和

力扣刷题资源

力扣刷题:四数之和(C#)

力扣刷题:四数之和(C++)

力扣刷题:四数之和(C++)

力扣刷题:四数之和(C#)