leetcode 150道题 计划花两个月时候刷完,今天(第十九天)完成了2道(45-46)150:
45.(452. 用最少数量的箭引爆气球)题目描述:
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。
一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。
给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数 。
第一版(题目有点抽象,但是画一下就可以很清晰的理解,再加上昨天刚做的区间合并,所以就还可以)
class Solution {
public int findMinArrowShots(int[][] points) {
int len=points.length;
Arrays.sort(points,(v1,v2)->(Integer.compare(v1[0], v2[0])));
int index=0;
int resCount=0;
int right=points[0][1];
while(index<len){
resCount++;
right=points[index][1];
// 找能合并的 然他们就是一箭
while(index+1<len&&right>=points[index+1][0]){
right=Math.min(right,points[index+1][1]);
index++;
}
index++;
}
return resCount;
}
}
46.(20. 有效的括号)题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号
第一版(说实话,写这道题时候我都忘了栈有哪些方法,只记住了 pop push 把peek 没想起来,真的是平时用到时候太少了。。)
class Solution {
public boolean isValid(String s) {
int len=s.length();
if(len%2!=0){
return false;
}
Stack<Character> stack=new Stack();
stack.push(s.charAt(0));
int index=1;
while(index<len){
char ch=s.charAt(index++);
if(ch==')'){
if(stack.isEmpty()||stack.peek()!='('){
return false;
}
stack.pop();
}else if(ch=='}'){
if(stack.isEmpty()||stack.peek()!='{'){
return false;
}
stack.pop();
}else if(ch==']'){
if(stack.isEmpty()||stack.peek()!='['){
return false;
}
stack.pop();
}else{
stack.push(ch);
}
}
return stack.isEmpty();
}
}
越来越懒系列。。白天肝了一天超鬼王,晚上才想起来要leetcode 差点今天就拖更了,我就骗自己说就做一道题吧,我的惰性太大了,但是也做了一道也算战胜了一半吧。
加油,早日跳槽!!!