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

LeetCode Hot100 (普通数组)

53. 最大子数组和

简单的dp问题实际上,如果当前位置的前一个位置的和大于0我们直接加上,不大于就忽略即可

class Solution {public int maxSubArray(int[] nums) {int ans=-100000;int sum=ans;for(int i=0;i<nums.length;i++){sum=Math.max(sum+nums[i],nums[i]);ans=Math.max(ans,sum);}return ans;}
}

56. 合并区间

我们定义前一个为a,后面一个为b,进行排序之后(a小的在前面,其次b小的在前面),这样就成为了一个线段覆盖问题,就会出现三种情况,

1.当前线段被前一个包围(忽略即可)

2.当前线段与前一个交接了一部分(两条线段合并)

3.不包含(再起一段)

代码模拟即可

class Solution {public int[][] merge(int[][] intervals) {node [] arr=new node[intervals.length];for(int i=0;i<intervals.length;i++){arr[i]=new node();arr[i].a=intervals[i][0];arr[i].b=intervals[i][1];}Arrays.sort(arr);ArrayList<node> ans =new ArrayList<>();int l=arr[0].a;int r=arr[0].b;for(int i=1;i<intervals.length;i++){if(arr[i].b<=r){continue;}else if(arr[i].a<=r){r=arr[i].b;}else{node now=new node();now.a=l;now.b=r;ans.add(now);l=arr[i].a;r=arr[i].b;}}ans.add(new node(l,r));int [][]res =new int[ans.size()][2];for(int i=0;i<ans.size();i++){res[i][0]=ans.get(i).a;res[i][1]=ans.get(i).b;}return res;}public static class node implements Comparable<node>{int a,b;node(){a=0;b=0;};node(int a1,int b1){a=a1;b=b1;};@Overridepublic int compareTo(node o) {if(a!=o.a){return a-o.a;}return b-o.b;}}
}

189. 轮转数组

取余即可

class Solution {public static void rotate(int[] nums, int k) {int []ans=new int[nums.length];for(int i=0;i<nums.length;i++){int wei=(i+k)%nums.length;ans[wei]=nums[i];}for(int i=0;i<nums.length;i++){nums[i]=ans[i];}}
}

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

简单的前缀和问题,我们记录当前位置前面的乘机,与当前位置后面的乘机即可,注意末尾和0位置应当为1

class Solution {public int[] productExceptSelf(int[] nums) {int []arr=new int[nums.length+2];int []brr=new int[nums.length+2];for(int i=0;i<nums.length;i++){arr[i+1]=nums[i];brr[i+1]=nums[i];}arr[0]=1;arr[nums.length+1]=1;brr[0]=1;brr[nums.length+1]=1;for(int i=1;i<=nums.length;i++){arr[i]=arr[i]*arr[i-1];}for(int i=nums.length;i>=1;i--){brr[i]=brr[i+1]*brr[i];}int []ans=new int[nums.length];for(int i=0;i<nums.length;i++){int wei=i+1;ans[i]=arr[wei-1]*brr[wei+1];}return ans;}
}

41. 缺失的第一个正数

不难发现,最大的正数也不会超过数组的长度,建立数组,一个一个放入即可

class Solution {public int firstMissingPositive(int[] nums) {int []brr=new int[nums.length+3];for(int i=0;i<nums.length ;i++){if(nums[i]>=0&&nums[i]<=nums.length){brr[nums[i]]++;}}for(int i=1;;i++){if(brr[i]==0){return i;}}}
}

相关文章:

  • 解决 NestJS 中热重载与实体类自动导入不能兼容的问题
  • Ajax(Asynchronous JavaScript and XML)
  • 【连接器专题】 EIA-364 系列标准的完整列表
  • Vue之使用Vue-cli创建Webpack工程化项目
  • JavaScript 中对数组进行去重
  • craw4ai 抓取实时信息,与 mt4外行行情结合实时交易,基本面来觉得趋势方向,搞一个外汇交易策略
  • 每日Prompt:心中的佛
  • js 手写promise
  • 从解决一个分享图片生成的历史bug出发,详解LayoutInflater和View.post的工作原理
  • Golang | 搜索哨兵-对接分布式gRPC服务
  • 【Prompt Engineering】摸索出的一些小套路
  • 【mysql】-5 索引
  • C++智能指针用法及内存管理
  • Jenkins+Docker 实现一键自动化部署项目
  • Laravel单元测试使用示例
  • Git 使用规范
  • 【 java 基础问题 第二篇 】
  • 学习threejs,超炫银河黑洞效果模拟
  • 初识Docker:容器化技术的入门指南
  • 180 度 = π 弧度
  • wordpress搜索 文章/seo软件全套
  • wordpress user_register/seo常用方法
  • 做网站app需要懂些什么软件/seo软件视频教程
  • 做网站最大的公司/谷歌google官网下载
  • 网站建设综合实训/信息流广告是什么意思
  • wordpress仿静态/网站关键字优化