leetcode 57 Insert Interval & leetcode 1046 Last Stone Weight & leetcode 1047 Remove All Adjacent Duplicates in String & leetcode 56 Merge Interval
lc57 Insert Interval 仔细分析题目,发现我们只需要处理那些与插入interval重叠的interval即可,换句话说,那些end早于插入start以及start晚于插入end的interval都可以保留。我们只需要两个指针,i&j分别保存重叠interval中最早start和最晚end即可,然后将interval [i, j]插入即可
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
List<int[]> res = new ArrayList<>();
for(int[] interval : intervals){
if(interval[1] < newInterval[0]){
res.add(interval);
}
else if(interval[0] > newInterval[1]){
res.add(newInterval);
newInterval = interval;
}
else{
newInterval[0] = Math.min(newInterval[0], interval[0]);
newInterval[1] = Math.max(newInterval[1], interval[1]);
}
}
res.add(newInterval);
return res.toArray(new int[0][0]);
}
}
lc1046 Last Stone Weight 用优先队列解,弹出两个最大值,比较他们的差值,然后按题目描述操作即可。
注意java自带的PriorityQueue是自然顺序,别忘了改成降序, PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());
class Solution {
public int lastStoneWeight(int[] stones) {
PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());
for(int stone :stones){
pq.offer(stone);
}
while(pq.size() > 1){
int max1 = pq.poll();
int max2 = pq.poll();
if(max1 != max2)
pq.offer(max1 - max2);
}
return pq.size() > 0 ? pq.peek() : 0;
}
}
lc1047 Remove All Adjacent Duplicates in String
1)用stack,创建一个与原数组(题目输入为String S,访问某一index时别忘了用charAt(),或者直接新建一个char数组,用S.toChar()把S转成char[])同样大小的数组,两个index,i&j,i用来遍历原数组,j用来处理stack。判断栈顶元素是否与当前i指向元素相等,相等就j--,否则就给stack[j]赋值为SChar[i]并继续loop
2)双指针,一个正常遍历原数组的索引i,另一个模拟stack操作,但是不需要额外申请空间,直接指向原数组的指针j。注意初值要设成-1,否则不方便初始化。其它逻辑同1)。返回值就是原数组的0-i。所以要注意长度应该设成i+1,new String(Schar, 0, i+1)
给出双指针版代码
class Solution {
public String removeDuplicates(String S) {
int len = S.length();
char[] tmp = new char[len];
int i=0;
for(int j=0; j<len; j++){
if(i>0 && tmp[i-1] == S.charAt(j))
i--;
else
tmp[i++] = S.charAt(j);
}
return new String(tmp, 0, i);
}
}
lc56 Merge Interval
贪心,将interval按照start排好序,按顺序合并overlap的interval 由于题目给的是int[][],int[][0]是start,int[][1]是end。先对start排序,然后对end也排序,为什么?end排完序不就没法和其原本的start匹配了吗?仔细想一想,overlap的interval打乱顺序对最终的merge有影响吗?其实没有,画个图就明白了
class Solution {
public int[][] merge(int[][] intervals) {
int m = intervals.length;
int[] head = new int[m];
int[] tail = new int[m];
for(int i=0; i<m; i++){
head[i] = intervals[i][0];
tail[i] = intervals[i][1];
}
Arrays.sort(head);
Arrays.sort(tail);
List<int[]> res = new ArrayList<>();
//int[] tmp = new int[2];
for(int i=0, j=0, loop = 0; i<m; i++){
//int[] tmp = new int[2];
if(i == m-1 || head[i+1] > tail[i]){
tmp[0] = head[j];
tmp[1] = tail[i];
//res.add(new int[]{tmp[0], tmp[1]});
res.add(tmp);
j = i+1;
}
}
int[][] ans = new int[res.size()][2];
return res.toArray(ans);
}
}
leetcode 57 Insert Interval & leetcode 1046 Last Stone Weight & leetcode 1047 Remove All Adjacent Duplicates in String & leetcode 56 Merge Interval的更多相关文章
- 【LeetCode】1047. Remove All Adjacent Duplicates In String 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 栈 日期 题目地址:https://leetcode ...
- LeetCode 1047. Remove All Adjacent Duplicates In String
1047. Remove All Adjacent Duplicates In String(删除字符串中的所有相邻重复项) 链接:https://leetcode-cn.com/problems/r ...
- 【leetcode】1047. Remove All Adjacent Duplicates In String
题目如下: Given a string S of lowercase letters, a duplicate removal consists of choosing two adjacent a ...
- LeetCode 1047. 删除字符串中的所有相邻重复项(Remove All Adjacent Duplicates In String)
1047. 删除字符串中的所有相邻重复项 1047. Remove All Adjacent Duplicates In String 题目描述 LeetCode1047. Remove All Ad ...
- 【leetcode】1209. Remove All Adjacent Duplicates in String II
题目如下: Given a string s, a k duplicate removal consists of choosing k adjacent and equal letters from ...
- LeetCode 1046. 最后一块石头的重量(1046. Last Stone Weight) 50
1046. 最后一块石头的重量 1046. Last Stone Weight 题目描述 每日一算法2019/6/22Day 50LeetCode1046. Last Stone Weight Jav ...
- 【Leetcode_easy】1046. Last Stone Weight
problem 1046. Last Stone Weight 参考 1. Leetcode_easy_1046. Last Stone Weight; 完
- 56. Merge Interval
56. Merge Interval 0. 参考文献 序号 文献 1 花花酱 LeetCode 56. Merge Intervals 2 [LeetCode] Merge Intervals 合并区 ...
- [LeetCode] 57. Insert Interval 插入区间
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
随机推荐
- git使用中的问题
一.github ssh_exchange_identification: read: Connection reset by peer 和电脑环境有关,检查防火墙关了没有,是不是杀毒软件.安全卫士的 ...
- 关于Windows10企业版的激活方法
今天打开Excel在使用的时候,突然弹出弹窗,说我的激活即将过期什么的,让我转到设置进行激活. 第一个想到的办法就是更换产品密钥,在网上找了不少产品密钥,密钥有效,但是需要连接企业激活什么的,因为我是 ...
- [转].NET Framework 4.5 五个很棒的特性
自.NET 4.5发布已经过了差不多1年了.但是随着最近微软大多数的发布,与.NET开发者交流的问题显示,开发者仅知道一到两个特性,其他的特性仅仅停留在MSDN并以简单的文档形式存在着. 比如说,当你 ...
- HTML - 文本标签相关
<html> <head></head> <body> <!-- 标题标签 : h1到h6, 文字大小依次变小, 加粗显示, 自带换行 标签中的部 ...
- thinkphp 模板赋值
如果要在模板中输出变量,必须在在控制器中把变量传递给模板,系统提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值. 大理石平台检定规程 $this->assign( ...
- js获取网页屏高 屏宽
<SCRIPT LANGUAGE="JavaScript"> <!-- //document.body.scrollTop 滚动条的上端距离 //document ...
- 简单DP (Preparing for Xtreme 12.0) | STL map使用
当水题遇上了map大坑 晚上写一个dp,弄了半天样例一直不过,对着队友的代码一行行看,发现跟自己逻辑完全一样啊... 然后就逐行输出比对,发现预处理出了问题,把map插入新值的地方改了下,果然就好了. ...
- 《DSP using MATLAB》Problem 8.22
时光飞逝,亲朋会一个一个离我们远去,孤独漂泊一阵子后,我们自己也要离开, 代码: %% -------------------------------------------------------- ...
- javaSpring学习总结day_01
本文章用于总结自己学习知识,有不足或错误之处清谅解. bean.xml 文件的读取方式: ClassPathXmlApplicationContext: 它是只能加载类路径下的配置文件 推荐 1.加载 ...
- MyEclipse 最常用实用快捷键