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

【二刷hot100】day 4

终于有时间刷刷力扣,求实习中。。。。

目录

1.最大子数组和

2.合并区间

3.轮转数组 

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

1.最大子数组和

class Solution {public int maxSubArray(int[] nums) {//就是说可以转换为计算左边的最大值,加上中间的值,加上右边的最大值;//这样的话,就可以使用递归了;int n=nums.length;if(n==0){return 0;}return maxSub(nums,0,n-1);}//计算常规连续的数组最大和public int maxSub(int [] nums,int left,int right){if(left==right){return nums[left];}int mid=(left+right)/2;return Math.max(maxSub(nums,left,mid),Math.max(maxSub(nums,mid+1,right),maxCross(nums,left,mid,right)));}//计算跨越mid元素的最大和public int maxCross(int [] nums,int left,int mid,int right){//s1为临时求和int s1=0;//左边的最大值int max_left=0;int start_left=mid-1;while(start_left>=left){s1+=nums[start_left];max_left=Math.max(s1,max_left);start_left--;}int s2=0;int max_right=0;int start_right=mid+1;while(start_right<=right){s2+=nums[start_right];max_right=Math.max(s2,max_right);start_right++;}//最终结果return max_left+nums[mid]+max_right;//不理解为什么max_left设置为0}
}

2.合并区间

class Solution {public int[][] merge(int[][] intervals) {//按照第一个元素进行排序Arrays.sort(intervals,(a,b)->a[0]-b[0]);List<int[]> ret=new ArrayList<>();for(int [] p:intervals){//当前区间左端点<=最后一个区间右端点,可以合并if(!ret.isEmpty()&&p[0]<=ret.get(ret.size()-1)[1]){ret.get(ret.size()-1)[1]=Math.max(ret.get(ret.size()-1)[1],p[1]);}else{//不能合并,添加区间ret.add(p);}}return ret.toArray(new int[ret.size()][]);}
}

3.轮转数组 

class Solution {public void rotate(int[] nums, int k) {int n=nums.length;k%=n;reverse(nums,0,n-1);reverse(nums,0,k-1);reverse(nums,k,n-1);}private void reverse(int[] nums,int i,int j){while(i<j){int tmp=nums[i];nums[i++]=nums[j];nums[j--]=tmp;}}
}

 

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

class Solution {public int[] productExceptSelf(int[] nums) {//pre表示前缀积;suf表示后缀积;ret=两者之积即可;int n=nums.length;int[] pre=new int[n];pre[0]=1;for(int i=1;i<n;i++){pre[i]=nums[i-1]*pre[i-1];}int[] suf=new int[n];suf[n-1]=1;for(int i=n-2;i>=0;i--){suf[i]=nums[i+1]*suf[i+1];}int[] ret = new int[n];for(int i=0;i<n;i++){ret[i]=pre[i]*suf[i];}return ret;}
}


http://www.mrgr.cn/news/56434.html

相关文章:

  • 动态规划之路径问题
  • Electron入门笔记
  • 深入理解左值和右值:软件工程中的基本概念
  • ECharts实现圆环图自定义logo
  • Spring声明式事务管理:深入探索XML配置方式
  • Unity 2d UI 实时跟随场景3d物体
  • Python程序设计 内置模块 随机函数
  • 【C++】— 一篇文章让你认识STL
  • Git的原理和使用(六)
  • 开源医疗管理的未来:参与码良诊所管理系统,助力智能医疗
  • 中国古代数学的杰出研究成果之一 - 杨辉三角 - 怎么用go、C++进行编程解决
  • 二叉树展开为链表
  • 代码随想录算法训练营第51天|101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104.建造最大岛屿
  • 集合框架16:HashMap的使用
  • C++编程语言:抽象机制:特殊运算符(Bjarne Stroustrup)
  • 容灾与云计算概念
  • Javascript基础面试题
  • Leetcode—1114. 按序打印【简单】(多线程)
  • http作业
  • 10.22软考初级网络管理员工重点之因特网与网络互联技术
  • 红黑树(创建 插入 测试验证)
  • 深入了解Java
  • 力扣 困难 52.N皇后II
  • <a-table>行数据增加点击事件并获取点击行的数据+自定义button按事件
  • MySQL之CRUD(下)
  • 中间件之MQ-Kafka