数据结构初阶-复杂度

🎈1.例题一

数组nums包含从0到n的所有整数,但其中缺了一个,请编写代码找出那个缺失的整数。
✅思路1:先冒泡排序,再遍历,当前值+1,不等于下一个数字。那么,当前值+1得到的数字即为缺失的整数。
✅思路2:用0与该数组中的每个数以及0~n这几个数进行异或运算,得到的结果即为缺失的数。
✅思路3:0~n等差数列公式计算和,依次减掉数组中的数据,剩下的就是消失的数字。

//思路二:
int missingNumber(int* nums, int numSize)
{
	int x = 0;
	for (int i = 0; i < numSize; ++i)
	{
		x ^= nums[i];
	}
	for (int i = 0; i <= numSize; ++i)
	{
		x ^= i;
	}
	return x;
}

//思路三:
int missingNumber(int* nums, int numSize)
{
	int N = numSize;
	int sum = ((0 + N) * (N + 1)) / 2;
	for(int i = 0; i < numSize; ++i)
	{
		sum -= nums[i];
	}
	return sum;
}

🎈2.例题二

给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。
✅思路:在这里插入图片描述

//思路一:
void reverse(int* a, int left, int right)
{
	while (left < right)
	{
		int temp = a[left];
		a[left] = a[right];
		a[right] = temp;
		++left;
		--right;
	}
}

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

//思路二:
void rotate(int* nums, int numsSize, int k)
{
	k %= numsSize;
	int temp[numsSize];
	int j = k;
	for (int i = 0; i < numsSize - k; ++i)
	{
		temp[j++] = nums[i++];
	}
	j = 0;
	for (int i = numsSize - k; i < numsSize; ++i)
	{
		temp[j++] = nums[i++];
	}
	for (int i = 0; i < numsSize; ++i)
	{
		nums[i] = temp[i];
	}
}

好啦,关于数据结构的复杂度到这里就先结束啦,后期会继续更新学习数据结构初阶的相关知识,欢迎大家持续关注、点赞和评论!❤️❤️❤️

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一口⁵个团子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值