第一篇博客

本文介绍了两种解决面试题的方法:对于17.04.消失的数字,可以通过等差数列求和或按位异或运算找到缺失值;对于189.轮转数组,可以使用三步翻转法或新建/挪位法实现O(N)时间复杂度的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言:这是我的第一篇博客,历时时长超过两时半,我希望用博客来记录自己编程的学习生活,种一颗树最好的时间的是 十年前,其次就是现在
在这里插入图片描述

一、第一题的两种解题思路

面试题 17.04. 消失的数字

1.等差数列求和

这里我们要引入一个高中的概念----数列,
数列是按照特定的规律或者次序排列的有限的数的集合,可以用来描述某种具有一定规律性的存在,在这个题中数列 一般式子为 an=an-1+1;
Sn=a1+a2……+an
Sn=an+an-1+……+a1
将求和公式倒着写一遍累和,a1+an=a2+an-1以此类推。因此:
**2Sn=(a1+an)n ->Sn=(a1+an)n/2

 int missingNumber(int* nums, int numsSize){
    int sum=(numsSize+1)*numsSize/2;
    for(int i=0;i<numsSize;i++)
        sum-=nums[i];
    return sum;
}

求出数列的前n项和在减去数列中的每一项,返回值值就变成了缺的那一项

2.按位异或^法

^符号表示两个数以二进制的形式进行运算,相同为0,相反为1,因此任何数异或0都等于它本身,任何数异或它自己都等于0

int missingNumber(int* nums, int numsSize){
    int sum=0;
    for(int i=0;i<numsSize;i++)
    {
        sum^=i^nums[i];
    }
    return sum^numsSize;
}

产生0~N的数分别与数组中的每个元素^一下,把相同的元素消掉,在这里注意: a ^ a ^ b == a ^ b ^a ,即异或的运算满足结合律,运算结果得到的最后一个数便是缺少的那一个数

二、第二题的两种解题思路

189. 轮转数组

1.三步翻转法O(N)

在这里插入图片描述
将一个数组右移动k位,可以等价于先把数组整体翻转,再把数组前k个翻转,在把数组的后numsSize-k个翻转。

void reverse(int*left,int*right)
{
    while(left<=right)
    {
        int tmp;
        tmp=*left;
        *left=*right;
        *right=tmp;
        left++;
        right--;
    }
}

void rotate(int* nums, int numsSize, int k){
    k%=numsSize;
    reverse(nums,nums+numsSize-1);
    reverse(nums,nums+k-1);
    reverse(nums+k,nums+numsSize-1);
}

优点:在时间复杂度为O(N)内完成,且没有开辟多余的空间

2.挪位法O( N 2 N^{2} N2)和新建立数组法O(N)

1.挪位法

挪位法就是每次把数组最后一位拿出来,然后前面的元素一次往后移动
在这里插入图片描述
下面是挪动过程
在这里插入图片描述

清晰的发现就是挪动之前用k%=numsSize,利用它具有的周期性,但它还是要执行约 O ( N 2 (N^{2} (N2) 次,效率低

2.新建数组法

可在O(N)时间内完成,但是要浪费O(N)的空间
在这里插入图片描述
等到前面一个数组下标i+K=numsSize-1的时候就把后k个元素从新的数组的头部依次添加

结束语

以上就是我对这两个题的理解啦,初写博客的我没有什么经验,期待各位大佬的指点!
在这里插入图片描述

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰瑞的猫^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值