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

网站宣传的重要性个人微信公众平台怎么用

网站宣传的重要性,个人微信公众平台怎么用,营销推广的特点是,网站建设怎么设置权限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.laogonggong.com/news/102599.html

相关文章:

  • 简答题网站建设步骤平邑建设局网站首页
  • 建设中网站源码电子商务网站建设卷子
  • 建英文网站上海抖音seo公司
  • 200M电信宽带做网站网站支付按钮怎么做
  • 企业 手机门户网站住房城乡建设厅网站准考证
  • php做电商网站有那几个模块亚马逊没有网站怎么做seo
  • 做阿里巴巴网站图片大全网络营销seo是什么意思
  • 台州微网站建设网易企业邮箱是什么意思
  • 兰州网站制作cheng怎么提高网站排名
  • 厦门优秀的网站设计企业网站建设实训体会
  • 不会做网站能做网络销售吗网站正在建设中 手机版
  • 做网站比较好的数字网站的建设进度表
  • 描述网站建设的基本流程wordpress更新以后进不去了
  • 网站建设主要用什么软件芜湖网站公司
  • 苏州网站开发公司济南兴田德润厉害吗苏州小程序开发哪家好
  • 免费网站注册域名软件开发流程图片
  • 静态网页有哪些网站shopify如何做瀑布流网站
  • 怎样注册自己的货运网站中国第一ppt模板网
  • 做网站用vswordpress可以关闭不
  • 做网站大概网站首页关键字方案
  • site 危险网站微信里的小程序占内存吗
  • dedecms制作的网站纯静态网站索引怎么做
  • 河北省衡水市景县规划网站营销型企业网站建设方案书
  • 天津正规制作网站公司邹城网站定制
  • 将公司网站建设成ip 查询地址
  • 网站建设 找vx cp5173wordpress get_the_tag_list
  • 开封+网站建设+网络推广博物馆wordpress主体
  • 焦作网站制作公司信息公开和网站建设工作总结
  • 包头网站建设公司瑞安做网站建设哪家好
  • 漫画网站怎么做怎么查网站是否备案