当前位置: 首页 > news >正文

福建省晋江市建设局网站2023年时政热点事件

福建省晋江市建设局网站,2023年时政热点事件,东营 微信网站建设,手工制作折纸复杂度的OJ例题 一、消失的数字1.思路一2.思路二3.思路三 二、旋转数组1.思路一2.思路二3.思路三 一、消失的数字 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(N)时间内完成吗? 链接:力扣&…

复杂度的OJ例题

  • 一、消失的数字
    • 1.思路一
    • 2.思路二
    • 3.思路三
  • 二、旋转数组
    • 1.思路一
    • 2.思路二
    • 3.思路三

一、消失的数字

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(N)时间内完成吗?
链接:力扣:消失的数字

1.思路一

排序+遍历:如果下一个数据不等于上一个数据加1,那么下一个数据就是那个消失的数字。
时间复杂度:O(N*LogN)由于这个时间复杂度时间复杂度过高,本思路不再冗余,赘述。

2.思路二

利用等差数列公式:从0加到n,然后再减去这个数组中的所有数字,那么最终所得的差就是缺失的数字。
时间复杂度:O(N)
代码如下:

#include <stdio.h>
int missingNumber(int* nums, int numsSize)
{int N = numsSize;int ret = N * (N + 1) / 2;for (int i = 0; i < N; i++){ret -= nums[i];}return ret;
}int main()
{int nums[] = { 0,1,2,3,4,5,7,8,9,10 };int sz = sizeof(nums) / sizeof(nums[0]);int ret=missingNumber(nums,sz);printf("%d", ret);return 0;
}

3.思路三

单身狗思路:利用:按位异或运算符:^(相同为0,相异为1)任何数字和0 ^ 还等于它本身。首先我们要把一个完整的数组按位异或起来,然后再与题目中缺失一个数字的数组再进行按位异或,最终得到的结果就是消失的数字。
代码如下:

#include <stdio.h>
int missingNumber(int* nums, int numsSize)
{int N = numsSize;int x = 0;//第1个循环的目的:先把一个完整的数组:从0~n的所有数字全部按位异或起来存放在一个数字x中//注意:这里循环的终止条件是:<=N,(因为我们连N也要算上)for (int i = 0; i <= N; i++){x ^= i;}//第2个循环的目的:就是让一个完整的数组与缺失一个数字的数组进行按位异或,最终得到的结果就是那个消失的数字!//注意:这里循环的终止条件是:<N,(因为nums数组中确失一个数字)for (int i = 0; i < N; i++){x ^= nums[i];}return x;
}int main()
{int nums[] = { 0,1,2,3,4,5,7,8,9,10 };int sz = sizeof(nums) / sizeof(nums[0]);int ret=missingNumber(nums,sz);printf("%d", ret);return 0;
}

二、旋转数组

链接力扣:旋转数组

1.思路一

中规中矩:依次向左旋转K个数据
合计旋转:K%N次
时间复杂度:O(N^2)
空间复杂度:O(1)
因为时间复杂度超过限制,所以说不予实现。

2.思路二

核心思想:以空间换时间:我额外开辟一个数组,直接复制从k开始后面所有数据到前面,然后把复制n-k的数字放后面。
时间复杂度:O(N)
空间复杂度:O(N)
在这里插入图片描述
代码如下:

void rotate(int* nums, int numsSize, int k)
{int n = numsSize;int* tmp = (int*)malloc(sizeof(int) * n);k %= n;//一定别忘了k%n!memcpy(tmp, &nums[n - k], sizeof(int) * k);memcpy(&tmp[k], nums, sizeof(int) * (n - k));memcpy(nums, tmp, sizeof(int) * n);free(tmp);//一定别忘了Free!!!因为是动态开辟的空间
}int main()
{int nums[] = { 1,2,3,4,5,6,7 };int k = 0;printf("请输入你想要旋转的次数:");scanf("%d", &k);int sz = sizeof(nums) / sizeof(nums[0]);rotate(nums, sz, k);for (int i = 0; i < sz; i++){printf("%d ", nums[i]);}return 0;
}

3.思路三

数学思想:以k为划分界线,左边逆置,右边逆置,整体逆置。

在这里插入图片描述
代码如下:

//逆置函数
void Inversion(int* nums, int left, int right)
{while (left < right){int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;left++;right--;}
}
//旋转函数
void rotate(int* nums, int numsSize, int k)
{int n = numsSize;k %= n;Inversion(nums, 0, n - k - 1);//左边逆置Inversion(nums, n - k, n - 1);//右边逆置Inversion(nums, 0, n - 1);//整体逆置}int main()
{int nums[] = { 1,2,3,4,5,6,7 };int k = 0;printf("请输入你想要旋转的次数:");scanf("%d", &k);int sz = sizeof(nums) / sizeof(nums[0]);rotate(nums, sz, k);for (int i = 0; i < sz; i++){printf("%d ", nums[i]);}return 0;
}

好了,今天的分享就到这里了
如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!
在这里插入图片描述

http://www.yidumall.com/news/43255.html

相关文章:

  • 学做网站用到哪些知识网址安全检测中心
  • 网站域名费会计分录怎么做百度云电脑网页版入口
  • 自己的主机做网站服务器zoho crm
  • 无代码开发平台什么意思seo外包网站
  • 海南网站优化模板建站网页
  • 手机网站域名怎么解析seo赚钱暴利
  • 做二手的网站都有哪些亚马逊开店流程及费用
  • 自己做网站做淘宝客seo的主要内容
  • 自建站外贸平台有哪些比较好网络广告有哪些形式
  • 网站建设所需资料及费用长沙服务好的网络营销
  • 成都网络推广哪家公司好真人seo点击平台
  • 网站空间文件夹营销策划公司名称
  • 柳城网站开发qq引流推广软件免费
  • 网站上面的内容里面放照片怎么做免费b2b平台推广
  • 传业做微采商城网站网络平台怎么推广
  • 自学网网站推广普通话手抄报内容
  • 营销型网站建设案例分析爱上链外链购买交易
  • windows wordpress资源网站优化排名软件公司
  • 寻找大连网站建设网站如何快速收录
  • 怎么做网站首页线上产品推广方案
  • 做的网站可以转给其他公司吗百度seo搜索营销新视角
  • 古建设工程造价管理协会网站站长统计免费下载
  • 网站怎么做速排营销推广模式有哪些
  • 网页浏览器字体大小设置seo关键词使用
  • 如何设置网站标题青岛seo服务哪家好
  • 广东网站建设服务商网络营销策略的概念
  • 今年刚做电商网站慧有生意吗长沙网站推广服务公司
  • 网站2个页面做首页口碑营销是什么意思
  • 网站开发有哪些竞赛北京网络seo
  • wordpress免费教育模板下载地址适合seo软件