| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 代码随想录算法训练营第三期day02-数组02 -> 正文阅读 |
|
[数据结构与算法]代码随想录算法训练营第三期day02-数组02 |
一、T977:有序数组的平方给你一个按?非递减顺序?排序的整数数组?nums,返回?每个数字的平方?组成的新数组,要求也按?非递减顺序?排序。 暴力法:
暴力解法的时间复杂度是 O(n + nlogn), 可以说是O(nlogn)的时间复杂度 双指针法
此时的时间复杂度为O(n),相对于暴力排序的解法O(n + nlog n)还是提升不少的。 不过空间复杂度似乎有所增加(毕竟不是原地修改数组) 二、T209:长度最小的子数组给定一个含有?n?个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组?[numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 暴力解法略
所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。 ????????在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。 那么滑动窗口如何用一个for循环来完成这个操作呢? ????????首先要思考 如果用一个for循环,那么应该表示 滑动窗口的起始位置,还是终止位置。 如果只用一个for循环来表示 滑动窗口的起始位置,那么如何遍历剩下的终止位置? ????????此时难免再次陷入 暴力解法的怪圈。 ????????所以 只用一个for循环,那么这个循环的索引,一定是表示 滑动窗口的终止位置。 看了一遍Carl介绍的C++思路后,实现如下:
?? ?如上所示,本来自己按照看过的思路复现的时候还加上了 if?(begin?<?end) 判断,但仔细想过之后,发现如果判断 begin<end,存在以下问题:
T59:螺旋矩阵II给你一个正整数?n?,生成一个包含?1?到?n2?所有元素,且元素按顺时针顺序螺旋排列的?n x n?正方形矩阵?matrix?。 求解本题的关键依然是要坚持循环不变量原则。
由外向内一圈一圈这么画下去。 可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,如果不按照固定规则来遍历,那就是一进循环深似海,从此offer是路人。 这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。 看了Carl的C++后自己复现,主要犯了2处错误:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:35:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |