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

收费小说网站怎么做seo技术306

收费小说网站怎么做,seo技术306,做网站的标题图片,做我的世界的mod的网站算法题 Leetcode 977.有序数组的平方 题目链接: 977.有序数组的平方 大佬视频讲解:977.有序数组的平方 个人思路 第一时间就只想到暴力解法,双重循环一个循环比较一个循环赋值;但这样可能会超时,所以还能用双指针&#xff0…

 算法题

Leetcode 977.有序数组的平方 

题目链接:  977.有序数组的平方

大佬视频讲解:977.有序数组的平方

个人思路

第一时间就只想到暴力解法,双重循环一个循环比较一个循环赋值;但这样可能会超时,所以还能用双指针,因为这个数组是递增数组,也就是说平方后最大的值只能在两边,那么前后各一个指针,比较其值,再根据大小放进新的数组中就能解决,这也是空间换时间的方法;

解法
暴力解法

循环赋值然后排序;

class Solution {public int[] sortedSquares(int[] nums) {for(int i=0;i<nums.length;i++){//暴力循环求值nums[i]*=nums[i];}Arrays.sort(nums);//排序return nums;}
}

时间复杂度:O(nlog n);(一个for循环为n,再加上排序的nlogn,和为n+nlogn ,取最大的时间复杂度即为nlogn)

空间复杂度:O(1);(没有使用多余空间)

双指针

left指向起始位置,right指向终止位置。定义一个新数组newNums,和A数组一样的大小,根据平方的大小来从数组newNums后往前赋值。

class Solution {public int[] sortedSquares(int[] nums) {int len=nums.length;//数组的长度int left=0; int right=len-1;//双指针int[] newNums=new int[len];//新数组int index=len-1;//新数组赋值的指针while(left<=right){if (nums[left] * nums[left] > nums[right] * nums[right]) {newNums[index]=nums[left]*nums[left];//新数组赋值index--;//新数组指针往前移++left;//起始指针往前移}else{newNums[index]=nums[right]*nums[right];//新数组赋值index--;--right;//结尾指针往后移}}return newNums;}
}

时间复杂度:O(n);(最糟糕的可能就是把数组全遍历一遍,因此为On)

空间复杂度:O(n);(使用多一个数组存值)

Leetcode 209.长度最小的子数组

题目链接:209.长度最小的子数组

大佬视频讲解:209.长度最小的子数组视频讲解

个人思路

一开始又想到暴力解法,但这样明显会超时;然后...就没思路了。(之前刷过好几次滑动窗口还是想不起来,菜得多练呀/无奈)

解法
滑动窗口

滑动窗口就是不断的调节子序列的起始位置和终止位置

其中主要确定如下三点:

  1. 窗口的定义;窗口就是 满足其和 ≥ target  的长度最小的 连续 子数组。
  2. 窗口的起始位置如何移动:如果当前窗口的值大于target 了,窗口就要向前移动了(也就是该缩小了)。
  3. 窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。

如果还是比较抽象建议看看视频209.长度最小的子数组视频讲解

class Solution {public int minSubArrayLen(int target, int[] nums) {//暴力解法,从头开始遍历,计算达到目标值的张最小连续数组即可;这样会超时int start=0;//滑动窗口的起始位置int sum=0;//滑动窗口的和int answer=Integer.MAX_VALUE;//结果数组长度for(int end=0;end<nums.length;end++){//滑动窗口的结束位置sum+=nums[end];while(sum>=target){answer=Math.min(answer,end-start+1);//用当前滑动窗口的长度与之前长度对比sum-=nums[start++];//不断变更start(子序列的起始位置)}}return answer==Integer.MAX_VALUE ? 0:answer;// 如果说明没有符合条件的子序列,即answer没有被赋值的话,就返回0,}
}

时间复杂度:O(n);(一个 for循环加上一个while没有嵌套,所以是n+n,2n)

空间复杂度:O(1);(没有使用多余空间)

Leetcode  59.螺旋矩阵II

题目链接:59.螺旋矩阵II

大佬视频讲解:59.螺旋矩阵II视频讲解

个人思路

这道题之前做过,没怎么搞懂,只记得是找规律,那先画图看看;画一个n为4和5的数组,螺旋循环后发现规律如下:有四个方向赋值;这四个方向的赋值数量刚刚开始都是n-1;如果n为奇数,则会剩下中间的值没有赋值;循环次数正好是n/2;根据这些规律怎么写代码也是个难题,还得多练

解法
找规律

顺时针画矩阵的过程:

  1. 上行;从左到右填充数据
  2. 右列;从上到下填充数据
  3. 下行;从右到左填充数据
  4. 左列:从下到上填充数据

由外向内一圈一圈这么画下去。可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,得按照固定规则来遍历,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。

下面的是按照左闭右开规则

class Solution {public int[][] generateMatrix(int n) {int loop = 0;  // 控制循环次数int start = 0;  // 每次循环的开始点(start, start)int count = 1;  // 定义填充数字int[][] res = new int[n][n];//结果数组int i, j;while (loop++ < n / 2) { // 先判断边界后,再自增1,以此循环(n-loop)for (j = start; j < n - loop; j++) {// 上侧从左到右填充数据res[start][j] = count++;}for (i = start; i < n - loop; i++) {// 右侧从上到下填充数据res[i][j] = count++;}for (; j >= loop; j--) {// 下侧从右到左填充数据res[i][j] = count++;}for (; i >= loop; i--) {// 左侧从下到上填充数据res[i][j] = count++;}start++;}if (n % 2 == 1) {//判断n为奇数还是偶数,若为奇数,循环填充后还剩一个中间数没填;res[start][start] = count;}return res;}
}

时间复杂度:O(n^2);(模拟遍历二维矩阵的时间)

空间复杂度:O(1);(没有使用多余空间)

以上是个人的思考反思与总结,若只想根据系列题刷,参考卡哥的网址代码随想录算法官网

http://www.zhongyajixie.com/news/36082.html

相关文章:

  • 做照片的网站有哪些软件免费的外链平台
  • 网站开发案例详解pdf网络销售靠谱吗
  • wordpress后台排版全部乱seo在线培训
  • 响应式网站建设过时吗外链推广网站
  • 做红包网站数据统计网站
  • 百度指数不高的网站怎么优化seo云优化软件破解版
  • 网站腾讯qq对话框怎么做免费站推广网站不用下载
  • 网络推广哪家好互联网关键词优化
  • 当铺网站建设方案北京网站制作
  • 最好建设网站关键词的选取原则有
  • 关键词优化方法有什么步骤温州seo团队
  • 建设网站的流程免费发软文的网站
  • 买外贸服装去哪个网站百度指数的功能
  • 求好心人给个地址seo关键词是怎么优化的
  • 江都建设局网站企业网络营销业务
  • 免费域名网站建设国外新闻最新消息
  • 自学网站建设工资seo关键词优化排名哪家好
  • WordPress安卓优化大师老版本下载
  • 网站建设与运营课程总结北京网站优化实战
  • 销售网站怎么做聚名网域名注册
  • 成都建网站要多少钱学校seo推广培训班
  • 户县规划建设和住房保障局网站百度推广好不好做
  • 怎么样做网站客服徐州seo外包公司
  • 昆明网络公司排行榜seo优化快速排名技术
  • 广州十大纯设计公司aso优化推广公司
  • 烟台建网站哪家好电商网站排名
  • 什么软件可以做动画seo研究中心怎么样
  • 百科网站程序抖音运营推广策划方案
  • 河南省交通基本建设质量检测监督站网站搜索大全引擎地址
  • 前端开发的三大基石站长工具seo推广 站长工具查询