算法刷题记录-其他类型(LeetCode)

57 57. Insert Interval

思路 模拟

用指针去扫 intervals,最多可能有三个阶段:

  1. 不重叠的绿区间,在蓝区间的左边
  2. 有重叠的绿区间
  3. 不重叠的绿区间,在蓝区间的右边

逐个分析
不重叠,需满足:绿区间的右端,位于蓝区间的左端的左边,如 [1,2]。

则当前绿区间,推入 ans数组,指针 +1,考察下一个绿区间。
循环结束时,当前绿区间的屁股,就没落在蓝区间之前,有重叠了,如 [3,5]。
现在看重叠的。我们反过来想,没重叠,就要满足:绿区间的左端,落在蓝区间的屁股的后面,反之就有重叠:绿区间的左端 <= 蓝区间的右端,极端的例子就是 [8,10]。

和蓝有重叠的区间,会合并成一个区间:左端取蓝绿左端的较小者,右端取蓝绿右端的较大者,不断更新给蓝区间。
循环结束时,将蓝区间(它是合并后的新区间)推入 ans 数组。
剩下的,都在蓝区间右边,不重叠。不用额外判断,依次推入 ans 数组。

代码

class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> ans;int i=0;for (; i < intervals.size(); ++i) {if (intervals[i][1]<newInterval[0]){ans.push_back(intervals[i]);}else{break;}}int i_begin=i;int end=newInterval[1];if (i_begin>=intervals.size()){intervals.push_back(newInterval);return intervals;}int begin=min(intervals[i_begin][0],newInterval[0]);while (i<intervals.size()&&intervals[i][1]<=newInterval[1]){i++;}if (i>=intervals.size()){ans.push_back({begin,newInterval[1]});return ans;}if (intervals[i][0]<=newInterval[1]){end=intervals[i][1];i++;}ans.push_back({begin,end});for (; i < intervals.size(); ++i) {ans.push_back(intervals[i]);}return ans;}
};

764. Largest Plus Sign

思路

对数据进行缓存,缓存每一个坐标的当前列·行的长度信息至max_length_columnmax_length_row。若对目标矩阵的每一个元素进行遍历,若缓存不存在则建立缓存,若缓存存在则直接返回缓存结果。最终的十字大小为min(列,行)

代码

class Solution {private int n;private int[][] mines_arr;private int[][] max_length_column;private int[][] max_length_row;public int orderOfLargestPlusSign(int _n, int[][] mines) {n = _n;mines_arr = new int[n][n];max_length_column = new int[n][n];max_length_row = new int[n][n];if (n * n == mines.length) {return 0;}for (int[] vec : mines) {mines_arr[vec[0]][vec[1]] = 1;}int curr_ans = 1;for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {if (mines_arr[i][j] == 1) {continue;}int column_length = max_length_column[i][j];if (column_length == 0) {updateColumn(i, j);column_length = max_length_column[i][j];}int row_length = max_length_row[i][j];if (row_length == 0) {updateRow(i, j);row_length = max_length_row[i][j];}curr_ans = Math.max(Math.min(column_length, row_length), curr_ans);if (curr_ans == 3) {int a = 3;}}}return curr_ans;}private void updateColumn(int r, int c) {int r_org = r;int curr = 1;while (r < n && mines_arr[r][c] != 1) {r++;}r--;for (int i = r_org; i <= r; i++, r--) {max_length_column[i][c] = curr;max_length_column[r][c] = curr;curr++;}}private void updateRow(int r, int c) {int column_org = c;int curr = 1;while (c < n && mines_arr[r][c] != 1) {c++;}c--;for (int i = column_org; i <= c; i++, c--) {max_length_row[r][i] = curr;max_length_row[r][c] = curr;curr++;}}
}

766. Toeplitz Matrix

思路

模拟题,按照顺序遍历即可

代码

    bool isToeplitzMatrix(vector<vector<int>> &matrix) {int column_length=matrix[0].size();int row_length=matrix.size();int r = 0;int c = 0;while (c < column_length) {int first_element=matrix[0][c];for (int i = 1; i < min(column_length-c,row_length); ++i) {if (matrix[i][c+i]!=first_element){return false;}}c++;}while (r < row_length) {int first_element=matrix[r][0];for (int i = 1; i < min(row_length-r,column_length); ++i) {if (matrix[r+i][i]!=first_element){return false;}}r++;}return true;}

796. Rotate String

思路(相对顺序不变)

首先应考虑原字符串和目标字符串长度相同。
考虑旋转后相对顺序不变的特点,在字符串后添加一个相同的原字符串,直接在修改后的字符串寻找是否存在目标字串即可。

    bool rotateString(string _s, string goal) {if (_s.length()!=goal.length()){return false;}string s = _s + _s;if (s.find(goal) != string::npos) {return true;}return false;}

816. Ambiguous Coordinates

思路 模拟

从坐标1开始尝试对每一个位置进行左右切分,并确认切分后的字串有多少种合法形式,然后令左右字串的合法形式做叉集即可。

代码

class Solution {List<String> ans=new ArrayList<>();public List<String> ambiguousCoordinates(String s) {s=s.substring(1,s.length()-1);for (int i=1;i<s.length();i++){combineResults(s,i);}return ans;}public void combineResults(String str,int idx){String[] x_axis=getValidateStrs(str.substring(0,idx));String[] y_axis=getValidateStrs(str.substring(idx));for (var x:x_axis){for (var y:y_axis){ans.add("("+x+", "+y+")");}}}public String[] getValidateStrs(String str){ArrayList<String> res=new ArrayList<>();char[] ch_list=str.toCharArray();for (int i=1;i<ch_list.length;i++){String integer_part=String.valueOf(ch_list,0,i);if (integer_part.matches("^0.+")){continue;}String decimal_part= str.substring(i);if (decimal_part.endsWith("0")){continue;};res.add(integer_part+"."+decimal_part);}if (!str.matches("^0.+")){res.add(str);}return res.toArray(new String[0]);}}

937. Reorder Data in Log Files

思路 模拟

按照题目要求,首先对数字类和字母类的log进行分类,数组类的直接并入ArrayList、字母类的宪先并入,最后按照要求排序即可。要注意的是,处理字母类时最好存储为ArrayList<String[]> 方便排序。

代码

class Solution {public String[] reorderLogFiles(String[] logs) {ArrayList<String[]>alphaSet=new ArrayList<>();ArrayList<String>numSet=new ArrayList<>();for (String log:logs){if (judgeNum(log)){numSet.add(log);continue;}alphaSet.add(log.split(" "));alphaSet.sort((o1,o2)->{int curr=1;for (; curr < Math.min(o1.length,o2.length); curr++) {int cmp=o1[curr].compareTo(o2[curr]);if (cmp!=0){return cmp;}}if (o1.length==o2.length){return o1[0].compareTo(o2[0]);}if (o1.length<o2.length){return -1;}return 1;});}String[] ans=new String[logs.length];ArrayList<String> res= alphaSet.stream().map(obj->String.join(" ",obj)).collect(Collectors.toCollection(ArrayList::new));for (int i = 0; i < res.size(); i++) {ans[i]=res.get(i);}for (int i = 0; i < numSet.size(); i++) {ans[i+res.size()]=numSet.get(i);}return ans;}boolean judgeNum(String string){var list=string.split(" ",2);return Character.isDigit(list[1].charAt(0));}
}

1267. Count Servers that Communicate

思路

统计每一行列计算机的数量,然后再对grid的每一个元素进行遍历,若grid[i][j]为计算机且其所在行列数量大于1则结果+1;

代码

    public int countServers(int[][] grid) {int[] rowServers=new int[grid.length];int[] columnServers=new int[grid[0].length];int ans=0;for (int i = 0; i < rowServers.length; i++) {int rowSum=0;for (int j = 0; j < columnServers.length; j++) {rowSum+=grid[i][j];}rowServers[i]=rowSum;}for (int j = 0; j < columnServers.length; j++) {int columnSum=0;for (int i = 0; i <rowServers.length ; i++) {columnSum+=grid[i][j];}columnServers[j]=columnSum;}for (int i = 0; i < grid.length; i++) {for (int j = 0; j <grid[0].length ; j++) {if (grid[i][j]==1&&(rowServers[i]>1||columnServers[j]>1)){ans++;}}}return ans;}

1921. Eliminate Maximum Number of Monsters

思路 模拟

使用 d i s t i / s p e e d i dist_i/speed_i disti/speedi即可求出每个怪物的到达时间 t i m e i time_i timei。对time进行排序。只要任意时刻来的怪兽数量大于时间即返回结果,若没有则说明可以全部消灭。

代码

    public int eliminateMaximum(int[] dist, int[] speed) {double[] time=new double[dist.length];for (int i = 0; i < dist.length; i++) {time[i]=(double) dist[i]/speed[i];}Arrays.sort(time);for (int i=0;i<dist.length;i++){if (time[i]-i<=EPSILON){return i;}}return dist.length;}

2240. Number of Ways to Buy Pens and Pencils

思路 模拟

对于每一个可能的cost1商品的数量(total-cnt_1*cost1>=0),计算cost2的商品一共有几种可能方案,求和即可。

代码

    public long waysToBuyPensPencils(int total, int cost1, int cost2) {long ans=0;long cnt_1=0;while (total-cnt_1*cost1>=0){long residual=total-cnt_1*cost1;ans+=residual/cost2+1;cnt_1++;}return ans;}

2840. Check if Strings Can be Made Equal With Operations II

思路

题目提到:

可以对两个字符串中的 任意一个 执行以下操作 任意 次:
选择两个下标 i 和 j ,满足 i < j 且 j - i 是 偶数,然后 交换 这个字符串中两个下标对应的字符。

也就是说 奇数位置和奇数位置之间的字符的位置可以任意互换,偶数位置和偶数位置之间的字符可以任意互换,因为他们满足j-i是偶数这一条件。因此,直接分别统计技术位和偶数位的各个字符的出现次数并比较两字符串的出现次数是否相同即可。

代码

class Solution {public boolean checkStrings(String s1, String s2) {int[] singleCnt=new int[26];int[] evenCnt=new int[26];for (int i=0;i<s1.length();i+=2){singleCnt[s1.charAt(i)-'a']++;}for (int i=1;i<s1.length();i+=2){evenCnt[s1.charAt(i)-'a']++;}for (int i=0;i<s2.length();i+=2){singleCnt[s2.charAt(i)-'a']--;if (singleCnt[s2.charAt(i)-'a']<0){return false;}}for (int i=1;i<s2.length();i+=2){evenCnt[s2.charAt(i)-'a']--;if (evenCnt[s2.charAt(i)-'a']<0){return false;}}return true;}
}

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

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

相关文章

JVM之堆和方法区

目录 1.堆 1.1 堆的结构 1.1.1 新生代&#xff08;Young Generation&#xff09; 1.1.2 年老代&#xff08;Old Generation&#xff09; 1.1.3 永久代/元空间&#xff08;Permanent Generation/Metaspace&#xff09; 1.2 堆的内存溢出 1.3 堆内存诊断 1.3.1 jmap 1.3.2…

HTML5-3-表格

文章目录 属性边框属性标题跨行和跨列单元格边距 HTML 表格由 <table> 标签来定义。 tr&#xff1a;tr 是 table row 的缩写&#xff0c;表示表格的一行。td&#xff1a;td 是 table data 的缩写&#xff0c;表示表格的数据单元格。th&#xff1a;th 是 table header的缩…

黑盒测试中的决策表设计

前言 在软件开发中&#xff0c;测试是不可或缺的一个环节。其中&#xff0c;黑盒测试是一种比较常用的测试方法。它强调测试人员不需要知道程序内部结构&#xff0c;只需根据程序规格说明书来设计测试用例进行测试。本文将介绍黑盒测试中的一种决策表设计方法。 同时&#xf…

Games202(P6、P7)环境光照与PRT全局光照

P6、实时环境光照 RealTime Environment Mapping 不同于全局光照 (1) IBL 我的Blog&#xff1a; QT with OpenGL&#xff08;IBL-漫反射辐照&#xff09;IBL-镜面反射&#xff08;预滤波篇&#xff09;IBL-镜面反射&#xff08;LUT篇&#xff09;QT with OpenGL(IBL-镜面反…

mongodb数据库操作

1、启动mongodb /usr/local/mongodb/bin/mongod --dbpath /var/mongodb/data/--logpath /var/mongodb/logs/log.log &在mongodb启动命令中 --dbpath 指定mongodb的数据存储路径 --logpath 指定mongodb的日志存储路径 2、停止mongodb 第一步先进入mongo命令行模式 第二…

2023,软件测试人的未来在哪里?

2023年&#xff0c;IT行业出现空前的萧条&#xff0c;首先是年初一开始各大厂像着了魔似的不约而同的纷纷裁员、降薪、奖金包缩水&#xff0c;随之而来的是需求萎缩&#xff0c;HC减少或封锁等等。 而有幸未被列入裁员名单的在职人员&#xff0c;庆幸之余也心有余悸&#xff0…

R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列...

全文链接&#xff1a;http://tecdat.cn/?p31162 最近我们被客户要求撰写关于SV模型的研究报告&#xff0c;包括一些图形和统计输出&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 相关视频 本文做SV模型&#xff0c;选取马尔可夫蒙特卡罗法(MCMC)、正则化广…

App线上网络问题优化策略

在我们App开发过程中&#xff0c;网络是必不可少的&#xff0c;几乎很难想到有哪些app是不需要网络传输的&#xff0c;所以网络问题一般都是线下难以复现&#xff0c;一旦到了用户手里就会碰到很多疑难杂症&#xff0c;所以对于网络的监控是必不可少的&#xff0c;针对用户常见…

打字侠:一款专业的中文打字网站

打字侠第一个正式版发布啦&#xff01;&#xff01;&#xff01; 虽然离期望的样子还有一段路要走&#xff0c;不过能看到它正式发布&#xff0c;我还是很激动哟&#xff01; 打字侠是一款面向中学生和大学生的在线打字软件&#xff0c;它通过合理的课程设计和精美的图形界面帮…

力扣接雨水(解析)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] …

【狂神】SpringMVC笔记(一)之详细版

1.Restful 风格 概念&#xff1a; 实现方式&#xff1a; 使用PathVariable 在url相同的情况下&#xff0c;会根据请求方式的不同来执行不同的方法。 使用RestFull风格的好处&#xff1a;简洁、高效、安全 2、接受请求参数及数据回显 2.1、请求参数 方式一&#xff1a;这里…

FFmpeg入门之简单介绍

FFmpeg是什么意思: Fast Forward Moving Picture Experts Group ffmpeg相关文档: Documentation FFmpeg ffmpeg源码下载: https://git.videolan.org/git/ffmpeg.git https://github.com/FFmpeg/FFmpeg.git FFmpeg能做什么? 多种媒体格式的封装与解封装 : 1.多种音…

基于SSM的家居商城系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

MySQL基础与库的基本操作

目录 1 MySQL基础一种存储解决方案SQL分类查看MySQL存储引擎 2 MySQL 库的操作数据库基本增删认识系统编码校验规则对数据库的影响数据库的查看与删除修改数据库数据库的备份与恢复查看连接情况 1 MySQL基础 一种存储解决方案 mysql本质是一种网络服务 mysql – 数据库服务的…

Stable DIffusion系统教程 | 局部重绘,增删修改的魔法棒

目录 1. 基本操作 1.1 步骤1 补充提示词 1.2 步骤2 绘制蒙版 1.3 步骤3 参数设置 2.局部重绘其他应用 2.1 手绘蒙版 2.2 删除某些东西 之前我们熟悉了AI绘画的各类模型&#xff0c;提示词写法&#xff0c;图像放大等技巧。但我们目前所有的操作都是针对整张图片的。 但…

栈的压入、弹出序列

⭐️ 题目描述 &#x1f31f; OJ链接&#xff1a;栈的压入、弹出序列 思路&#xff1a; 我们使用一个栈来模拟题目所给的压入、和弹出序列&#xff0c;若模拟成功则是真&#xff0c;模拟失败返回假。我们可以每次先从 pushV 入栈一个元素&#xff0c;在判断当前栈顶元素和 pop…

企业架构LNMP学习笔记10

1、Nginx版本&#xff0c;在实际的业务场景中&#xff0c;需要使用软件新版本的功能、特性。就需要对原有软件进行升级或重装系统。 Nginx的版本需要升级迭代。那么如何进行升级呢&#xff1f;线上服务器如何升级&#xff0c;我们选择稳定版本。 从nginx的1.14版本升级到ngin…

pprof火焰图性能优化

pprof火焰图性能优化 火焰图&#xff08;flame graph&#xff09;是性能分析的利器,在go1.1之前的版本我们需要借助go-torch生成,在go1.1后go tool pprof集成了此功能,今天就来说说如何使用其进行性能优化 在你启动http server的地方直接加入导入: _ “net/http/pprof” 获取…

zabbix监控H3C设备

背景 常见的服务和主机已经使用Prometheus进行监控了&#xff0c;但是网络设备还未配置监控。使用基于SNMP对网络设备进行监控。 设备概览 主要类型为H3C的路由器和交换机。H3CS5560交换机 路由器MER5200 er8300 步骤 配置网络设备开启telnet远程&#xff1b; 配置启用sn…

阻塞/非阻塞、同步/异步(网络IO)

1.阻塞/非阻塞、同步/异步(网络IO) 【思考】典型的一次 IO 的两个阶段是什么&#xff1f; 数据就绪 和 数据读写 数据就绪 &#xff1a;根据系统 IO 操作的就绪状态 阻塞 非阻塞 数据读写 &#xff1a;根据应用程序和内核的交互方式 同步 异步 陈硕&#xff1a;在处理 IO …