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

厦门建设局网站2018口碑营销的优势

厦门建设局网站2018,口碑营销的优势,哈尔滨行业网站建设策划,成都seo手段977. 有序数组的平方 题目链接:977. 有序数组的平方 思路:双指针思想,数组是有序的且含有负数,其中元素的平方一定是两边最大。定义两个指针,从两端开始向中间靠近,每次比较两个指针的元素平方大小&#…

977. 有序数组的平方

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

思路:双指针思想,数组是有序的且含有负数,其中元素的平方一定是两边最大。定义两个指针,从两端开始向中间靠近,每次比较两个指针的元素平方大小,将较大的一个存入结果数组。(注意结果数组是从小到大的,所以要从后往前开始存入

时间复杂度:O(n),空间复杂度O(n)

class Solution {public int[] sortedSquares(int[] nums) {int n = nums.length;// 两个指针分别初始化在正负子数组绝对值最大的元素索引int i = 0, j = n - 1;// 得到的有序结果是降序的int p = n - 1;int[] res = new int[n];// 执行双指针合并有序数组的逻辑// 注意这里要i <= j,因为最后要处理两个元素while (i <= j) {if (Math.abs(nums[i]) > Math.abs(nums[j])) {res[p] = nums[i] * nums[i];i++;} else {res[p] = nums[j] * nums[j];j--;}p--;}return res;}
}

也可以使用for循环写法

public int[] sortedSquares(int[] nums) {int left = 0, right = nums.length - 1;int[] res = new int[nums.length];int p = res.length - 1;for (int i = 0; i < res.length; i++) {if (nums[left] * nums[left] > nums[right] * nums[right]){res[p] = nums[left] * nums[left];left++;}else {res[p] = nums[right] * nums[right];right--;}p--;}return res;
}

209. 长度最小的子数组

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

思路:滑动窗口,两个指针代表窗口的左右边界,右边界一直遍历到最后,当窗口中元素和大于目标值的时候,更新结果,并且左边界往前走一步。(注意:这里一定是窗口右边界遍历一次,然后根据条件更新左边界。如果左边界作为遍历条件,一次循环是解不出来的。)

时间复杂度:O(n)

为什么时间复杂度是O(n) ?

不要以为双重while就是O(n^2)啊, 主要是看每一个元素被操作的次数,每个元素在滑动窗口进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。

class Solution {public int minSubArrayLen(int target, int[] nums) {int i = 0;    // i代表窗口左边界int j = 0;    // j为窗口右边界int res = nums.length + 1;    // 定义结果为最大int total = 0;     // total存放窗口中元素和while (j < nums.length) {total = total + nums[j];j++;// 窗口中元素符合题意,更新结果,更新左边界和totalwhile (total >= target) {res = Math.min(res, j - i);total = total - nums[i];i++;}}return res == nums.length + 1 ? 0 : res;}
}

59. 螺旋矩阵II

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

思路:本题并不涉及什么算法,就是模拟过程,但却十分考察对代码的掌控能力。借用代码随想录中的图片容易理解。注意每次只需要改变二维数组行或列的坐标。

img

时间复杂度:O(n)

class Solution {public int[][] generateMatrix(int n) {int[][] matrix = new int[n][n];int upper_bound = 0, lower_bound = n - 1;int left_bound = 0, right_bound = n - 1;// 需要填入矩阵的数字int num = 1;while (num <= n * n) {if (upper_bound <= lower_bound) {// 在顶部从左向右遍历for (int j = left_bound; j <= right_bound; j++) {matrix[upper_bound][j] = num++;}// 上边界下移upper_bound++;}if (left_bound <= right_bound) {// 在右侧从上向下遍历for (int i = upper_bound; i <= lower_bound; i++) {matrix[i][right_bound] = num++;}// 右边界左移right_bound--;}if (upper_bound <= lower_bound) {// 在底部从右向左遍历for (int j = right_bound; j >= left_bound; j--) {matrix[lower_bound][j] = num++;}// 下边界上移lower_bound--;}if (left_bound <= right_bound) {// 在左侧从下向上遍历for (int i = lower_bound; i >= upper_bound; i--) {matrix[i][left_bound] = num++;}// 左边界右移left_bound++;}}return matrix;}
}

数组题目总结

数组的题目的主要解法有以下几种:

二分法

遇到有序数组,需要进行查找操作的时候,可以考虑二分法。

双指针法

双指针法里面比较重要的,是快慢指针法。当一个指针无法解题,或者需要使用一次循环完成两次循环里才能解决的问题时,需要考虑使用双指针。双指针的种类很多,滑动窗口也可以看作双指针法。

滑动窗口

滑动窗口是一种很巧妙的方法,可以不断的调节子序列的位置。当我们遇到需要查找符合条件的子序列时,可以考虑滑动窗口。

模拟行为

这种题目就是考察代码逻辑能力,但是要注意遵守循环不变量原则,二分法中也用到了循环不变量原则,其实就是保证循环过程中,定义的循环范围不要改变,例如:不要再一个开区间的循环中,做闭区间的循环操作,这样的代码逻辑十分混乱。

http://www.tj-hxxt.cn/news/3591.html

相关文章:

  • 网站制作内联框长沙seo代理
  • 建设网站学什么语言交换链接适合哪些网站
  • 公司网站建设意义青岛关键词排名系统
  • 湖北企业网站建设多少钱惠州seo快速排名
  • 广州网站排名专业乐云seo整站seo排名外包
  • 金山做网站的公司网络推广哪个好
  • 做开锁推广什么网站好tool站长工具
  • 做网站一般是什么工作千网推软文推广平台
  • 涞水住房和城乡建设厅网站站外推广怎么做
  • 在网站上做送餐外卖需要哪些资质四川网络推广推广机构
  • 寻找网站建设推广市场营销毕业论文
  • 做淘宝网站java代码成都网站seo费用
  • 网站首页没收录北京疫情发布不再公布各区数据
  • 小程序网站做多大尺寸网络推广渠道分类
  • 网络销售网站外包互联网搜索引擎
  • 迈若网站建设郑州seo多少钱
  • 网站建设又叫什么软件温州网站建设制作
  • 网站布局f点击精灵seo
  • 卡盟网站建设广州竞价外包
  • 重庆高端网站建设价格培训机构seo
  • 想百度搜到网站新域名怎么做竞价推广的基本流程
  • 北京专业做网站推广爱站网seo综合查询工具
  • 公司网站制作注意什么营销型网站是什么意思
  • 小语种服务网站长沙市最新疫情
  • 有哪些网站可以学做糕点的网页制作教程书籍
  • 做网站找客源广州网站外包
  • 宝武马钢集团公司招聘网站广州最新疫情通报
  • 有什么网站可以做ppt厦门网站推广公司哪家好
  • 产品外包装设计网站网站seo招聘
  • 芙蓉网站制作西安seo顾问