【时间复杂度】

旋转数组
题目
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

/*
解题思路:使用三次逆转法,让数组旋转k次
1. 先整体逆转
// 1,2,3,4,5,6,7
// 7 6 5 4 3 2 1
2. 逆转子数组[0, k - 1]
// 5 6 7 4 3 2 1
3. 逆转子数组[k, size - 1]
// 5 6 7 1 2 3 4
*/
void reverse(int* nums, int begin, int end)
{while(begin < end){int tmp = nums[begin];nums[begin] = nums[end];nums[end] = tmp;++begin;--end;}
}// 三趟逆置倒的思路
void rotate(int* nums, int numsSize, int k){if(k > numsSize){k %= numsSize;}reverse(nums, 0, numsSize-1);reverse(nums, 0, k-1);reverse(nums, k, numsSize-1);
}
void reverse(int* nums,int left,int right)
{while(left<right){int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}return ;
}void rotate(int* nums, int numsSize, int k){//如果k大于numsSize// if(k>=numsSize)//     k = k%numsSize;reverse(nums,numsSize-k,numsSize-1);reverse(nums,0,numsSize-k-1);reverse(nums,0,numsSize-1);return ;
}

总结:
这道题目有两种思路(对于这种三次逆序的解法)

案例:nums = [1,2,3,4,5,6,7], k = 3 [5,6,7,1,2,3,4]
思路1:先去整体逆序、再去逆序0到k-1和k到n-1(后两个的顺序都可以,主要是得先去逆序0到n-1)
思路2:先去逆序(n-k)到n-1和(0到n-k-1),再去逆序0到n-1(需要最后去逆序整体0到n-1)
综上所述:先去逆序整体再去逆序两部分和先去逆序两部分再去逆序整体两种思路

当然还可以通过以空间换取时间的解决方法

void rotate(int* nums, int numsSize, int k){// 新的思路:使用拷贝+开辟新空间int n = numsSize;int* temp = (int*)malloc(n*sizeof(int));k%=n;//拷贝三步走memcpy(temp,nums+n-k,sizeof(int)*k);// 拷贝n-k到n-1memcpy(temp+k,nums,sizeof(int)*(n-k));// 拷贝0到k个 memcpy(nums,temp,sizeof(int)*n);// 将temp拷贝回去numsfree(temp);temp = NULL;
}

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

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

给定一个整数sum,从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum,最快的平均时间复杂度是( )

使用双指针法来解决。(整个数组被搜索一遍,就可以得到结果)
双指针法的时间复杂度是O(N),其中N是数组的长度。
具体的做法是,初始化两个指针left和right,分别指向数组的起始位置和结束位置。
然后,通过不断移动指针来逼近sum。每次比较a+b与sum的差值的绝对值,更新最接近sum的结果。具体步骤如下:
1. 初始化两个指针left和right,分别指向数组的起始位置和结束位置。
2. 初始化最接近sum的结果为无穷大。
3. 进入循环,直到left大于等于right为止:- 计算当前指针所指的元素a和b的和sum_ab。- 如果sum_ab等于sum,直接返回a和b。- 否则,更新最接近sum的结果,如果当前差值的绝对值小于之前的最小差值,则更新结果。- 如果sum_ab小于sum,将left指针向右移动一位。- 如果sum_ab大于sum,将right指针向左移动一位。
4. 返回最接近sum的结果。
总结起来,使用双指针法可以在最快的平均时间复杂度O(N)内解决这个问题。

设某算法的递推公式是T(n)=T(n-1)+n,T(0)=1,则求该算法中第n项的时间复杂度为()

该算法的递推公式是T(n) = T(n-1) + n,初始条件是T(0) = 1。
根据递推公式,我们可以展开算法的时间复杂度如下:T(n) = T(n-1) + n= (T(n-2) + (n-1)) + n= T(n-2) + (n-1) + n= T(n-3) + (n-2) + (n-1) + n= ...= T(0) + 1 + 2 + 3 + ... + (n-2) + (n-1) + n我们知道等差数列的求和公式是:S = (n/2)(a + l),其中n是项数,a是首项,l是末项。
在这个算法中,首项a=1,末项l=n,项数n。将这些值代入公式,我们可以得到:T(n) = 1 + 2 + 3 + ... + (n-2) + (n-1) + n= (n/2)(1 + n)= (n^2 + n)/2
因此,该算法的第n项的时间复杂度为O(n^2)。
T(n)
=T(n-1)+n
=T(n-2)+(n-1)+n
=T(n-3)+(n-2)+(n-1)+n
...
=T(0)+1+2+...+(n-2)+(n-1)+n
=1+1+2+...+(n-2)+(n-1)+n
=1+(n+1)*n/2

但是:请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/7301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码)

疲劳驾驶检测和识别2&#xff1a;Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 目录 疲劳驾驶检测和识别2&#xff1a;Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 1.疲劳驾驶检测和识别方法 2.疲劳驾驶数据集 &#xff08;1&#xff09;疲…

MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点6:MySQL Enterprise Monitor之Query Analyzer

文章目录 MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点6&#xff1a;MySQL Enterprise Monitor之Query AnalyzerMySQL Enterprise Monitor之Query AnalyzerQuery Response Time index (QRTi)例题例题1: Query Analyzer答案与解析1 参考 【免责声明】文章仅供学习交流&#x…

vue中如何通过webpack-bundle-analyzer打包分析工具进行配置优化

vue中随着项目的不断功能迭代和开发&#xff0c;项目文件越来越多&#xff0c;项目的打包文件也越来越大。如何对打包文件进行分析优化&#xff0c;减小打包文件大小呢&#xff1f;可以通过webpack-bundle-analyzer 这个打包分析工具进行解决。 1、webpack-bundle-analyzer的安…

Python Flask构建微信小程序订餐系统 (十一)

🔥 已经删除的会员不允许进行编辑昵称 🔥 🔥 已经删除的会员要隐藏掉会员信息的编辑按钮 🔥 🔥 创建商品表 food 🔥 CREATE TABLE `food` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`cat_id` int(11) NOT NULL DEFAULT 0 COMMENT 分类id,`name` varchar…

【算法题解】51. 二叉树的最近公共祖先

这是一道 中等难度 的题 https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为…

【模型压缩】 LPPN论文阅读笔记

LPPN论文阅读笔记 LPPN: A Lightweight Network for Fast Phase Picking 背景 深度学习模型的问题在于计算复杂度较高&#xff0c;在实际数据处理中需要面临较高的处理代价&#xff0c;且需要专用的加速处理设备&#xff0c;如GPU。随着数据累积&#xff0c;迫切需要设计一种…

【力扣刷题 | 第二十二天】

目录 前言&#xff1a; 63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 343. 整数拆分 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a; 前言&#xff1a; 今天我们爆刷动态规划章节的题目&#xff0c;相关的算法理论介绍我也有写过文章&#xff1a;【夜…

深度学习anaconda+pycharm+虚拟环境迁移

一、下载好anaconda和pycharm安装包。 下载anaconda:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror pycharm汉化包 二、安装anaconda 深度学习环境配置-Anaconda以及pytorch1.2.0的环境配置&#xff08;Bubbliiiing 深度学习 教程&…

Java版本企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境&#xff0c;促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标…

uniapp小程序跳转其他小程序uni.navigateToMiniProgram效果demo(整理)

放点击事件里面即可 uni.navigateToMiniProgram({appId: , //跳转的小程序的aooIdpath: pages/index/index?id123, //如果这里不填&#xff0c;默认是跳转到对方小程序的主页面extraData: { //需要传给对方小程序的数据data1: test},success(res) {// 打开成功} })

JAVA设计模式——单例模式

单例模式是应用最广的设计模式之一&#xff0c;也是程序员最熟悉的一个设计模式&#xff0c;使用单例模式的类必须保证只能有创建一个对象。 今天主要是回顾一下单例模式&#xff0c;主要是想搞懂以下几个问题 为什么要使用单例&#xff1f; 如何实现一个单例&#xff1f; 单…

c++11/c++98动态规划入门第5课,经典DP问题 --- 区间

第1题 取数问题 查看测评数据信息 有一排N个数&#xff0c;你和小明2个人玩游戏&#xff0c;每个人轮流从2端取数&#xff0c;每次可以从左或右取&#xff0c;不能从中间取。你取的所有的数的和是你的得分&#xff0c;小明取的所有的数的和是小明的得分。如果你先取&#x…

【图像分割】基于蜣螂优化算法DBO的Otsu(大津法)多阈值电表数字图像分割 电表数字识别【Matlab代码#51】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 原始蜣螂优化算法1.1 滚球行为1.2 跳舞行为1.3 繁殖行为1.4 偷窃行为 2. 多阈值Otsu原理3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【可更换其他算法&#xff0c;获取资源请见文章第…

springboot 项目启动不打印spring 启动日志

今天项目遇到一个很奇怪的问题&#xff0c;服务在启动时&#xff0c;不打印spring 的启动日志。经过排查发现是因为其他的依赖引入了 log4j 的依赖&#xff0c;因为我们的项目用的是logback&#xff0c;所以项目中没有log4j 的相关配置&#xff0c;所以干扰到了日志的打印 原因…

Vue入门项目——WebApi

Vue入门——WebApi vue3项目搭建组合式API响应式APIreactive()ref() 生命周期钩子computed计算属性函数watch监听函数父子通信模板引用组合选项 vue3项目搭建 简单看下Vue3的优势吧 下载安装npm及node.js16.0以上版本&#xff08;确保安装成功可用如下代码检查版本&#xff0…

工厂电能质量治理解决方案

1、概述 谐波的危害十分严重&#xff0c;尤其在工厂这种设备较多的场合。大部分设备都是谐波源&#xff0c;谐波使电能的生产、传输和利用的效率降低&#xff0c;使电气设备过热、产生振动和噪声&#xff0c;并使绝缘老化&#xff0c;使用寿命缩短&#xff0c;甚至发生故障或烧…

RocketMQ 5.0 无状态实时性消费详解

作者&#xff1a;绍舒 背景 RocketMQ 5.0 版本引入了 Proxy 模块、无状态 pop 消费机制和 gRPC 协议等创新功能&#xff0c;同时还推出了一种全新的客户端类型&#xff1a;SimpleConsumer。 SimpleConsumer 客户端采用了无状态的 pop 机制&#xff0c;彻底解决了在客户端发布…

QT字节数组类QByteArray

QT字节数组类QByteArray 初始化访问某个元素截取字符串获取字节数组的大小数据转换与处理Hex转换数值转换与输出 字母大小写转换字符串数值转化为各类数值QBQyteArray和char*互转QByteArray 和std::string互转与字符串QString互转QByteArray和自定义结构体之间的转化判断是否为…

区块链实验室(11) - PBFT耗时与流量特征

以前面仿真程序为例&#xff0c;分析PBFT的耗时与流量特征。实验如下&#xff0c;100个节点构成1个无标度网络&#xff0c;节点最小度为5&#xff0c;最大度为38. 从每个节点发起1次交易共识。统计每次交易的耗时以及流量。本文所述的流量见前述仿真程序的说明:区块链实验室(3)…

13.4.2 【Linux】sudo

相对于 su 需要了解新切换的使用者密码 &#xff08;常常是需要 root 的密码&#xff09;&#xff0c; sudo 的执行则仅需要自己的密码即可。sudo 可以让你以其他用户的身份执行指令 &#xff08;通常是使用 root 的身份来执行指令&#xff09;&#xff0c;因此并非所有人都能够…