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

广东源江建设集团有限公司网站苏州网站建设caiyiduo

广东源江建设集团有限公司网站,苏州网站建设caiyiduo,有没有购买链接,关键词挖掘啊爱站网普通数组 1.合并区间 56. 合并区间https://leetcode.cn/problems/merge-intervals/ 先针对左区间进行排序,这样可以对右边进行考虑,如果intervals 中一个新的区间的左端点小于原ans的右端点,那么就能合并,右端点合并成原p【1】和…

普通数组

1.合并区间

56. 合并区间https://leetcode.cn/problems/merge-intervals/

先针对左区间进行排序,这样可以对右边进行考虑,如果intervals 中一个新的区间的左端点小于原ans的右端点,那么就能合并,右端点合并成原p【1】和新ans.get(nums - 1)[1]的最大值,否则没有交接,直接add进ans。

 

补一下.toArray();方法,把将List<>(可变长度的有序列表)转为数组 

class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(p,q) -> p[0] - q[0]);List<int[]> ans = new ArrayList<>();for(int [] p :intervals){int nums = ans.size();if(nums > 0 && ans.get(nums -1)[1] >= p[0]){//可以合并ans.get(nums - 1)[1] = Math.max(ans.get(nums - 1)[1],p[1]);}else{ans.add(p);}}return ans.toArray(new int[ans.size()][]);//返回一个object数组指定一下类型}
}

2.轮转数组

189. 轮转数组https://leetcode.cn/problems/rotate-array/

发现规律,如何反转,就是先把整体反转,然后以k为分界,0-k先反转,k-1到n -1再翻转,只需要写一个reverse函数就完事

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++;end--;}}
}

3.除自身以外数组的乘积

238. 除自身以外数组的乘积https://leetcode.cn/problems/product-of-array-except-self/

不让用除法,如果让用,其实可以直接所有的前缀积,除以自身,但是不让用了,就用一手前缀积&后缀积。非常巧妙,注意在算后缀积的时候,要×以前前缀积存到ans的东西

class Solution {public int[] productExceptSelf(int[] nums) {int n = nums.length;int pre = 1;int suf = 1;int[] ans = new int[n];for(int i = 0; i < n; ++i){ans[i] = pre;pre *= nums[i];}//注意后缀积的顺序不太一样for(int j = n - 1; j >=0; --j){ans[j] *= suf;//这是×了以前存储的前缀积suf *= nums[j];}return ans;}
}

4.缺失的第一个正数

41. 缺失的第一个正数https://leetcode.cn/problems/first-missing-positive/

有点脑筋急转弯的一个题目,难点在于要求空间复杂度为1,所以哈希的方法不行

学了一手原地哈希

就是把这个nums数组直接看成一个哈希

这个整体过程就是,把1放在下标为0的位置上,一直交换,最后遍历,看哪个不满足        

 

class Solution {public int firstMissingPositive(int[] nums) {int len = nums.length;for(int i = 0; i < len; ++i){//这里if换成while是因为换完以后要接着换while(nums[i] > 0 && nums[i] <= len && nums[nums[i] - 1] != nums[i]){//这个条件其实是有点绕的,将1放在下标为0的位置上swap(nums,i,nums[i] - 1);//所以就是i和nums[i] - 1来换}}for(int i = 0; i < len; ++i){if(nums[i] != i + 1){return i + 1;}}return len + 1;}private void swap(int[] nums,int first,int end){int temp = nums[first];nums[first] = nums[end];nums[end] = temp;}
}
其实用一个Hashset也能过,但是空间复杂度是O(n)
class Solution {public int firstMissingPositive(int[] nums) {int n = nums.length;Set<Integer> hashSet = new HashSet<>();for(int num : nums){hashSet.add(num);}for(int i = 1; i <= n ;++i){if(!hashSet.contains(i))return i;}return n + 1;}
}

矩阵

1.矩阵置零

73. 矩阵置零https://leetcode.cn/problems/set-matrix-zeroes/

使用两个标记数组boolen【】行何列各一个,如果一个点为0,把这一行和这一列都置为true,然后再重新遍历

class Solution {public void setZeroes(int[][] matrix) {int m = matrix.length;int n = matrix[0].length;boolean[] row = new boolean[m];boolean[] col = new boolean[n];for(int i = 0; i < m; ++i){for(int j = 0; j < n; ++j){if(matrix[i][j] == 0){row[i] = col[j] = true;}}} for(int i = 0;i < m; ++i){for(int j = 0; j < n; ++j){if(row[i] || col[j]){matrix[i][j] = 0;}}}}
}

2.螺旋矩阵

54. 螺旋矩阵https://leetcode.cn/problems/spiral-matrix/

这种螺旋矩阵的题都是类似的模拟问题,看了k神的题解,真的非常清晰比官解清晰的多得多

 class Solution {public List<Integer> spiralOrder(int[][] matrix) {if(matrix.length ==0){return new ArrayList<Integer>();}int l = 0,r = matrix[0].length -1,t = 0,b = matrix.length - 1,x  = 0;Integer[] res = new Integer[(r + 1) * (b + 1)];while(true){for(int i = l; i <= r; i++) res[x++] = matrix[t][i];if(++t > b)    break;for(int i = t; i <= b; i++) res[x++] = matrix[i][r];if(--r < l)    break;for(int i = r; i >= l; i--) res[x++] = matrix[b][i];if(--b < t)     break;for(int i = b; i >= t; i--) res[x++] = matrix[i][l];if(++l > r)     break;}return Arrays.asList(res);}
}

3.旋转图像

48. 旋转图像https://leetcode.cn/problems/rotate-image/

这道题目对空间复杂度有要求,要求不能使用辅助矩阵

 先使用一下使用辅助矩阵的,重要的点是搞清楚映射公式

但是这个存在一个问题,就是说映射之后会使原始矩阵元素被覆盖,所以要克隆一个相同的辅助矩阵

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;int [][] tmp = new int[n][n];for(int i = 0; i < n; ++i){tmp[i] = matrix[i].clone();}for(int i = 0; i < n; ++i){for(int j = 0; j < n; ++j){matrix[j][n - 1 - i] = tmp[i][j];}}}
}

如果不做一个辅助矩阵,

只要分别以矩阵左上角 1/4 的各元素为起始点执行以上旋转操作,即可完整实现矩阵旋转。

具体来看,当矩阵大小 n 为偶数时,取前  2/n行、前  2/n  列的元素为起始点;当矩阵大小 n 为奇数时,取前  2/n 行、前  2/n+1 列的元素为起始点。 

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;for(int i = 0; i < n/2; ++i){for(int j = 0; j < (n +1) /2; ++j){//做一个临时变量int tmp = matrix[i][j];matrix[i][j] = matrix[n - 1 - j][i];matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];matrix[j][n - 1 - i] = tmp;}}}
}

4.搜索二维矩阵Ⅱ

240. 搜索二维矩阵 IIhttps://leetcode.cn/problems/search-a-2d-matrix-ii/

 暴力的话就两遍遍历就能解决,时间复杂度就是O(mn)

class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int[] row : matrix){for(int ele : row){if(ele == target){return true;}}}return false;}
}

再次看了K神的解题,太夸张了,怎么能想到的,用到了从上到下递增和从左到右递增的性质

把左下角这个数作为标志数flag

若 flag > target ,则 target 一定在 flag 所在 行的上方 ,即 flag 所在行可被消去。
若 flag < target ,则 target 一定在 flag 所在 列的右方 ,即 flag 所在列可被消去。

class Solution {public boolean searchMatrix(int[][] matrix, int target) {//从左下角开始int i = matrix.length - 1,j = 0;while(i >= 0 && j < matrix[0].length){if(matrix[i][j] > target) i--;else if(matrix[i][j] < target) j++;else return true;}return false;}
}


文章转载自:

http://d91A4vSb.tgpgx.cn
http://Rf1b8PxN.tgpgx.cn
http://1Im2RBN2.tgpgx.cn
http://jr9QAQWO.tgpgx.cn
http://7lUlUD3P.tgpgx.cn
http://fPY7JFtk.tgpgx.cn
http://h76q66Hf.tgpgx.cn
http://s1Vy6y01.tgpgx.cn
http://KHHU6P8j.tgpgx.cn
http://dX4XAAis.tgpgx.cn
http://sB1hkkWd.tgpgx.cn
http://xwb9Wn5K.tgpgx.cn
http://umrF0Zd2.tgpgx.cn
http://UqZTuILF.tgpgx.cn
http://SvTCtoRX.tgpgx.cn
http://VgitVJKl.tgpgx.cn
http://XX6iKB7p.tgpgx.cn
http://04005TvI.tgpgx.cn
http://DZhvvS3U.tgpgx.cn
http://plSgbpnE.tgpgx.cn
http://F8HusLni.tgpgx.cn
http://SbbCzZkY.tgpgx.cn
http://0ENK1pce.tgpgx.cn
http://xVJ7Z9bp.tgpgx.cn
http://liM3Oyum.tgpgx.cn
http://X8J8R6S1.tgpgx.cn
http://f4UzYM69.tgpgx.cn
http://tv2DfPSo.tgpgx.cn
http://fwjAUKyK.tgpgx.cn
http://wBX5UXwQ.tgpgx.cn
http://www.dtcms.com/wzjs/684324.html

相关文章:

  • 营销型网站有意义吗安徽省建设工程信息网实名制
  • 网站建设方案及报价单网页设计师主要是做什么
  • 网站制作销售术语宣传
  • 建设科技信息+网站建设无锡高端网站建设开发
  • 怎么在网站上做充话费业务用python做的网站
  • 杭州市社区建设网站湛艺建设集团网站
  • 网站内链怎么删除我用织梦5.7做个网站应该把淘宝客店铺链接放到哪
  • 小说网站开发的实际意义重庆交通在线公众号
  • wordpress 防站教程有什么国外的设计网站推荐
  • 做一个展示型网站要多少钱网上购物英语作文
  • 深圳微信分销网站制作门户网站系统建设清单
  • 公司做网站推广有效果吗找资料的免费网站
  • 怎么做能上谷歌网站企业网站小程序源码
  • 网站建设极地网wordpress关注微信登陆
  • 长治哪家公司做网站好河北利用关键词优化网页
  • 怎么在网站上做按钮网页游戏宣传片排行榜
  • 全屏网站 图片优化dede网站名称更改不了
  • 湖北二师网站建设排名太原网络搭建
  • 免费做网站百度能录入网址正能量
  • 做兼职什么网站比较好如何在云服务器上搭建网站
  • 专注服务于站长和网站的信息平台.wordpress导航标签文件在哪
  • 给网站做h5缓存机制浏览器直接进入网站
  • 网络营销中自建网站国内购物网站案例分析
  • 有没有可以做兼职的网站吗wordpress标题间隔符修改
  • 做网站 公司有哪些陕西建设网综合综合服务中心
  • emlog做企业网站海沧建设网站多少
  • 电子书推送网站怎么做有源代码如何做网站
  • 构建网站无障碍建设河南如何建网站要什么条件
  • 制作展示型网站公司哪家好国内网站域名
  • c access做网站登录页面怎么维护网站教程