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

中国做本地服务好的网站百度怎样发布作品

中国做本地服务好的网站,百度怎样发布作品,wordpress个人中心页,如何建立一个购物网站本篇博客讲解LeetCode热题100道普通数组篇中的六道题 第三道:轮转数组(中等) 第四道:除自身以外数组的乘积(中等) 第三道:轮转数组(中等) 方法一:使用额外的数…

本篇博客讲解LeetCode热题100道普通数组篇中的六道题

第三道:轮转数组(中等)

第四道:除自身以外数组的乘积(中等)

第三道:轮转数组(中等)

 方法一:使用额外的数组

class Solution {public void rotate(int[] nums, int k) {int len = nums.length;int[] newArr = new int[len];for (int i = 0; i < len; ++i) {newArr[(i + k) % len] = nums[i];}System.arraycopy(newArr, 0, nums, 0, len);}
}

 1.新建一个nums数组长度的数组。

2.轮转k次。因此我们将从(i + k) % len开始,将nums数组中的值依次赋值给新数组。

3.最终将新数组中的值拷贝回原来的数组。

时间复杂度: O(n),其中 n 为数组的长度。

空间复杂度: O(n)。

方法二:数组翻转

​​​​​​class Solution {public void rotate(int[] nums, int k) {k %= nums.length;reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}public void reverse(int[] nums, int start, int end) {while (start < end) {int temp = nums[start];nums[start] = nums[end];nums[end] = temp;start += 1;end -= 1;}}
}

翻转的思想:轮转k个位置,那么也就相当于先将数组翻转。之后再翻转(0,k-1)这个位置的元素。再翻转(k,n-1)这个位置的元素。下如图演示。

第四道:除自身以外数组的乘积(中等)

 方法一:前缀之积乘以后缀之积

class Solution {public int[] productExceptSelf(int[] nums) {int length = nums.length;// L 和 R 分别表示左右两侧的乘积列表int[] L = new int[length];int[] R = new int[length];int[] answer = new int[length];// L[i] 为索引 i 左侧所有元素的乘积// 对于索引为 '0' 的元素,因为左侧没有元素,所以 L[0] = 1L[0] = 1;for (int i = 1; i < length; i++) {L[i] = nums[i - 1] * L[i - 1];}// R[i] 为索引 i 右侧所有元素的乘积// 对于索引为 'length-1' 的元素,因为右侧没有元素,所以 R[length-1] = 1R[length - 1] = 1;for (int i = length - 2; i >= 0; i--) {R[i] = nums[i + 1] * R[i + 1];}// 对于索引 i,除 nums[i] 之外其余各元素的乘积就是左侧所有元素的乘积乘以右侧所有元素的乘积for (int i = 0; i < length; i++) {answer[i] = L[i] * R[i];}return answer;}
}

1.新建一两个数组长度为nums的长度。一个L存前缀之积,一个R存后缀之积

2.L[i] 表示索引 i 左侧所有元素的乘积,因为索引为 '0' 的元素左侧没有元素, 所以 L[0] = 1

3.for循环从1开始,计算每个元素的前缀之积 L[i] = nums[i - 1] * L[i - 1];

4.再从后往前遍历计算后缀之积。R[length - 1] = 1;。R[i] = nums[i + 1] * R[i + 1];得到后缀之积。

5.     for (int i = 0; i < length; i++) {
            answer[i] = L[i] * R[i];
        }

6.最终返回answer。

时间复杂度:O(N),其中 N 指的是数组 nums 的大小。预处理 L 和 R 数组以及最后的遍历计算都是 O(N) 的时间复杂度。
空间复杂度:O(N),其中 N 指的是数组 nums 的大小。使用了 L 和 R 数组去构造答案,L 和 R 数组的长度为数组 nums 的大小 

方法二:方法一的进阶,空间复杂度 O(1) 的方法 

class Solution {public int[] productExceptSelf(int[] nums) {int length = nums.length;int[] answer = new int[length];// answer[i] 表示索引 i 左侧所有元素的乘积// 因为索引为 '0' 的元素左侧没有元素, 所以 answer[0] = 1answer[0] = 1;for (int i = 1; i < length; i++) {answer[i] = nums[i - 1] * answer[i - 1];}// R 为右侧所有元素的乘积// 刚开始右边没有元素,所以 R = 1int R = 1;for (int i = length - 1; i >= 0; i--) {// 对于索引 i,左边的乘积为 answer[i],右边的乘积为 Ranswer[i] = answer[i] * R;// R 需要包含右边所有的乘积,所以计算下一个结果时需要将当前值乘到 R 上R *= nums[i];}return answer;}
}

1.新建一个answer数组长度为nums的长度。

2.answer[i] 表示索引 i 左侧所有元素的乘积,因为索引为 '0' 的元素左侧没有元素, 所以 answer[0] = 1

3.for循环从1开始,计算每个元素的前缀之积answer[i] = nums[i - 1] * answer[i - 1];

4.再从后往前遍历计算后缀之积。R 为右侧所有元素的乘积。开始R=1。从n-1开始遍历。令

answer[i] = answer[i] * R;得到最终答案。R *= nums[i];得到后缀之积。

5.最终返回answer。

时间复杂度:O(N),其中 N 指的是数组 nums 的大小。分析与方法一相同。
空间复杂度:O(1),输出数组不算进空间复杂度中,因此我们只需要常数的空间存放变量。

http://www.hrbkazy.com/news/29241.html

相关文章:

  • 用vs2013做网站登录黄山网络推广公司
  • 网站模板如何编辑软件搜索引擎优化是什么意思
  • 网站的宗旨商丘优化公司
  • dw网页制作表格充电宝关键词优化
  • 怎么更改网站域名海南seo排名优化公司
  • 专注旅游网站网站开发搜索引擎下载安装
  • 不备案如何架设网站seo企业建站系统
  • 使用爬虫做的网站武汉网站排名提升
  • 网站建设栏目层级抖音seo搜索引擎优化
  • 图片1600px做网站100个关键词
  • 做本地网站需要的软件电商网站对比
  • 企业建设门户网站有哪些整站优化 快速排名
  • 莆田网站设计竞价什么意思
  • 做网站买一个域名就够了吗最新百度关键词排名
  • 电商网站开发会遇到哪些问题新的数据新闻
  • 高端做网站公司seo关键词优化的技巧和方法
  • 本科毕业论文答辩稿网站开发成人教育培训机构十大排名
  • 杭州建设信息网seo是一种利用搜索引擎的
  • 厦门医院网站建设深圳网络营销运营
  • 门户网站建设 请示中国国家数据统计网
  • 网站到期不续费个人网页制作成品
  • 南沙网站建设wwiw武汉关键词排名推广
  • 制作手机网站什么软件下载百家号权重查询
  • 中国建设教育协会官网安全员证书汕头seo管理
  • 做网页设计的网站北大青鸟培训机构靠谱吗
  • 所有网站大全网站seo重庆
  • 手机上有趣的网站爱链在线
  • linux怎么做网站公司网站的作用
  • 昆山 网站建设什么样的人适合做策划
  • 手机排行榜2022年seo关键词排名优化如何