力扣labuladong——一刷day35

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、力扣912. 排序数组
  • 二、力扣 315. 计算右侧小于当前元素的个数
  • 三、力扣493. 翻转对
  • 四、力扣327. 区间和的个数


前言


就这么说吧,所有递归的算法,你甭管它是干什么的,本质上都是在遍历一棵(递归)树,然后在节点(前中后序位置)上执行代码,你要写递归算法,本质上就是要告诉每个节点需要做什么

一、力扣912. 排序数组

class Solution {public int[] sortArray(int[] nums) {Merge.sort(nums);return nums;}
}
class Merge{public static int[] temp;public static void sort(int[] nums){temp = new int[nums.length];sort(nums, 0, nums.length-1);}public static void sort(int[] nums, int low, int high){if(low == high){return;}int mid = low + (high-low)/2;sort(nums, low, mid);sort(nums,mid+1,high);merge(nums,low,high,mid);}public static void merge(int[] nums, int low, int high, int mid){for(int a = low; a <= high; a ++){temp[a] = nums[a];}int i = low, j = mid+1, k = low;for(; i <= mid && j <= high;){if(temp[i] < temp[j]){nums[k++] = temp[i++];}else{nums[k++] = temp[j++];}}while(i <= mid){nums[k++] = temp[i++];}while(j <= high){nums[k++] = temp[j++];}}
}

二、力扣 315. 计算右侧小于当前元素的个数

class Solution {private class Pair{int id;int val;public Pair(int id, int val){this.id = id;this.val = val;}}Pair[] temp;int[] count;public List<Integer> countSmaller(int[] nums) {int n = nums.length;temp = new Pair[n];Pair[] arr = new Pair[n];for(int i = 0; i < n; i ++){arr[i] = new Pair(i,nums[i]);}count = new int[n];sort(arr,0,n-1);List<Integer> res = new ArrayList<>();for(int i = 0; i < n; i ++){res.add(count[i]);}return res;}public void sort(Pair[] arr, int low, int high){if(low == high){return;}int mid = low + (high-low)/2;sort(arr,low,mid);sort(arr,mid+1,high);merge(arr,low,high,mid);}public void merge(Pair[] arr, int low, int high, int mid){for(int i = low; i <= high; i ++){temp[i] = arr[i];}for(int i = low, j = mid+1, k = low; k <= high; k ++){if(i == mid+1){arr[k] = temp[j++];}else if(j == high+1){count[temp[i].id] += j-mid-1;arr[k] = temp[i++];}else if(temp[i].val > temp[j].val){arr[k] = temp[j++];}else{count[temp[i].id] += j-mid-1;arr[k] = temp[i++];}}}
}

三、力扣493. 翻转对

class Solution {int[] temp;int count = 0;public int reversePairs(int[] nums) {temp = new int[nums.length];sort(nums,0, nums.length-1);return count;}public void sort(int[] nums, int low, int high){if(low == high){return;}int mid = low + (high-low)/2;sort(nums,low,mid);sort(nums,mid+1,high);merge(nums,low,high,mid);}public void merge(int[] nums, int low, int high, int mid){for(int i = low; i <= high; i ++){temp[i] = nums[i];}int end = mid+1;for(int i = low; i <= mid; i ++){while(end <= high && (long)nums[i] > (long)2*nums[end]){end ++;}count += end - mid -1;}for(int i = low, j = mid+1, k = low; k <= high; k ++){if(i == mid+1){nums[k] = temp[j++];}else if(j == high+1){nums[k] = temp[i++];}else if(temp[i] > temp[j]){   nums[k] = temp[j++];}else{nums[k] = temp[i++];}}}
}

四、力扣327. 区间和的个数

class Solution {int lower,upper,count=0;long[] temp;public int countRangeSum(int[] nums, int lower, int upper) {this.lower= lower;this.upper = upper;long[] preSum = new long[nums.length+1];for (int i = 0; i < nums.length; i++) {preSum[i + 1] = (long)nums[i] + preSum[i];}temp = new long[preSum.length];sort(preSum, 0, preSum.length-1);return count;}public void sort(long[] nums, int low, int high){if(low == high){return;}int mid = low + (high-low)/2;sort(nums,low,mid);sort(nums,mid+1,high);merge(nums,low,high,mid);}public void merge(long[] nums,int low, int high, int mid){for(int i = low; i <= high; i ++){temp[i] = nums[i];}int start = mid+1, end = mid+1;for(int i = low; i <= mid; i ++){while(start <= high && nums[start]-nums[i] < lower){start ++;}while(end <= high && nums[end] - nums[i] <= upper){end ++;}count += end-start;}for(int i = low, j = mid+1, k = low; k <= high; k ++){if(i == mid+1){nums[k] = temp[j++];}else if(j == high+1){nums[k] = temp[i++];}else if(temp[i] > temp[j]){nums[k] = temp[j++];}else{nums[k] = temp[i++];}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK1.8 新特性(二)【Stream 流】

前言 上节我们学了 lambda 表达式&#xff0c;很快我就在 Flink 的学习中用到了&#xff0c;我学的是 Java 版本的 Flink&#xff0c;一开始会以为代码会很复杂&#xff0c;但事实上 Flink 中很多地方都用到了 函数接口&#xff0c;这也让我们在编写 Flink 程序的时候可以使用 …

MIB 6.1810实验Xv6 and Unix utilities(2)sleep

难度:easy Implement a user-level sleep program for xv6, along the lines of the UNIX sleep command. Your sleep should pause for a user-specified number of ticks. A tick is a notion of time defined by the xv6 kernel, namely the time between two interrupts f…

【nlp】2.5(gpu version)人名分类器实战项目(对比RNN、LSTM、GRU模型)工程管理方式

人名分类器实战项目 0 说明1 工程项目设计2 数据预处理data_processing3 创建模型model4 模型测试test5 训练配置config6 模型训练train7 模型对比绘图plotfigure8 模型预测predict9 代码测试demo0 说明 本项目对前一个博客内容2.5(cpu version) 人名分类器实战项目(对比RNN、…

vertx学习

写在前面 新公司用到了vertx&#xff0c;所以这里学习下。 源码 。 1:vertx是啥&#xff1f; 是个框架吗&#xff1f;不是。只是一个工具类&#xff0c;只不过提供的功能比较全面&#xff0c;如http&#xff0c;websocket&#xff0c;tcp&#xff0c;json处理&#xff0c;定…

2D 3D 工业组态技术 meta2d JavaScript

本心、输入输出、结果 文章目录 2D 3D 工业组态技术 meta2d JavaScript前言2D 3D 工业组态技术 meta2d JavaScript 简介2D 3D 工业组态技术 meta2d JavaScript 特性丰富的组态能力0代码数据通信组态的应用多端适配能力强大的扩展能力追求卓越性能丰富的组件库资源广泛的应用场景…

C语言变量与常量

跟着肯哥&#xff08;不是我&#xff09;学C语言的变量和常量、跨文件访问、栈空间 栈空间还不清楚&#xff0c;期待明天的课程内容 C变量 变量&#xff08;Variable&#xff09;是用于存储和表示数据值的名称。 主要包括四个环节&#xff1a;定义、初始化、声明、使用 在我刚…

什么是BT种子!磁力链接又是如何工作的?

目录 一.什么是BT&#xff1f;1.BT简介&#xff1a;1.1.BT是目前最热门的下载方式之一1.2.BT服务器是通过一种传销的方式来实现文件共享的 2.小知识&#xff1a;2.1.你知道吗BT下载和常规下载到底有哪些不同2.2.BT下载的灵魂&#xff1a;种子2.3.当下载结束后&#xff0c;如果未…

122. 买卖股票的最佳时机 II

给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得的 最大 利润 。 示例 1&…

Java实现的插件化策略模式

Java实现的插件化策略模式 目录结构实现BaseDealAnno.java(注解)BasePluginEnum.java(枚举)BaseDealFactory.javaContextBaseDealListener.java(核心类)BaseDealHandler.java(接口)BaseAudioService.java(可扩展多个)验证目录结构 com.demo.mytest ├── strategy │ ├──…

mysql客户端navicat的一些错误合集

关于mysql的客户端的使用的一些问题 问题描述&#xff1a; 在使用navicat prenium客户端的时候&#xff0c;连接数据库出现 Table ‘performance_schema.session_variables’ doesn’t exist 错误 解决方案&#xff1a; 首先找到mysql的bin目录 然后winR 进入到cmd界面 输入…

《循环双向链表》(带哨兵位的头节点)

目录 ​编辑 前言&#xff1a; 关于双向循环带头链表: 模拟实现双向循环带头链表&#xff1a; 1.typedef数据类型 2.打印链表 3.初始化链表&#xff1a; 4.创建节点 5.尾插 6.头插 7.尾删 8.头删 9.寻找节点 10.在节点前插入 11.删除指定节点 单链表和双链表的区别…

解析:什么是生成式AI?与其他类型的AI有何不同?

原创 | 文 BFT机器人 快速浏览一下头条新闻&#xff0c;你会发现生成式AI似乎无处不在。事实上&#xff0c;一些新闻标题甚至可能是通过生成式AI编写的&#xff0c;例如OpenAI旗下的ChatGPT&#xff0c;这个聊天机器人已经展现出了生成看起来像人类所写文本的惊人能力。 当人们…

maptalks三维地图网址

三维 地址: http://examples.maptalks.com/examples/cn/gltf/gltf-marker/shader

Redis实现延时队列-工具类

Redis实现延时队列-工具类 RedisDelayQueueUtil第一种方式:优点:缺点:第二种方式:优点:缺点:总结:RedisDelayQueueUtil 依赖: <dependency><groupId>org.springframework.boot

简朴博客系统测试报告

文章目录 一. 项目简介二. 测试概要三. 测试环境四. 测试执行概况及功能测试1. 手工测试1.1 手动测试用例编写1.2 执行的部分测试用例 2. 自动化测试Selenium2.1 编写测试用例2.2 自动化测试代码 3. 测试结果 五. 发现的问题 一. 项目简介 简朴博客系统是采用前后端分离的方式…

《Effective C++》条款17

以独立语句将newed对象置入智能指针 class A {...}; int g() {...} int f(shared_ptr<A> a,g()) {...} int main() {f(shared_ptr<A> (new A), g()); } 假如你想通过主函数里的语句进行调用f函数。虽然看上去没有什么问题&#xff0c;但是实际上可能会造成内存泄漏…

【QML】警告Name is declared more than once

1. 问题&#xff1a; qml函数中的不同块中定义同名变量&#xff0c;报警&#xff1a;Name is declared more than once 举例&#xff1a; function test(a){if(a "1"){var re 1;console.log(re);}else{var re 2; //这里会报警&#xff1a;Name is declared mor…

asp.net core mvc 之 依赖注入

一、视图中使用依赖注入 1、core目录下添加 LogHelperService.cs 类 public class LogHelperService{public void Add(){}public string Read(){return "日志读取";}} 2、Startup.cs 文件中 注入依赖注入 3、Views目录中 _ViewImports.cshtml 添加引用 4、视图使用…

Scala---样例类+隐式转换

样例类(case classes) 1、概念理解 使用了case关键字的类定义就是样例类(case classes)&#xff0c;样例类是种特殊的类。实现了类构造参数的getter方法&#xff08;构造参数默认被声明为val&#xff09;&#xff0c;当构造参数是声明为var类型的&#xff0c;它将帮你实现set…

Python每日一练@前言

Python每日一练前言 导读 人生苦短&#xff0c;我用Python 大家好&#xff0c;我是鹅不糊涂 欢迎大家来到Python每日一练 好处 加强编程能力: 每日一练可以帮助提升编程技能&#xff0c;通过解决各种编程问题和挑战&#xff0c;你能够不断锻炼自己的逻辑思维和解决问题的能力…