逻辑还算清楚。还以为有什么简洁的解法,但似乎也没有。
class Solution {
public boolean lemonadeChange(int[] bills) {
int pocket5 = 0;
int pocket10 = 0;
for(int i=0; i<bills.length; i++) {
int bill = bills[i];
if(bill == 5) {
pocket5++;
continue;
}
else if (bill == 10) {
if(pocket5 == 0) {
return false;
}
else {
pocket5--;
pocket10++;
continue;
}
}
else if (bill == 20) {
if(pocket5 == 0 || (pocket10 == 0 && pocket5 < 3)) {
return false;
}
else {
if(pocket10 > 0) {
pocket10--;
pocket5--;
continue;
}
else {
pocket5 -= 3;
continue;
}
}
}
}
return true;
}
}
406. Queue Reconstruction by Height 题意有点繁琐。思路是先按照高矮排序,然后用新数组往固定位置插元素。排序的时候,同样高度的,要按照前面人数的升序来排。Java的lambda注意用法。
class Solution {
public int[][] reconstructQueue(int[][] people) {
int len = people.length;
if(len == 1) {
return people;
}
Arrays.sort(people, (a,b)->{
if(a[0] == b[0]) return a[1]-b[1];
else return b[0] - a[0];
});
LinkedList<int[]> rlist = new LinkedList<>();
for(int[] p : people) {
rlist.add(p[1], p);
}
return rlist.toArray(new int[people.length][]);
}
}
452. Minimum Number of Arrows to Burst Balloons 没思路的一题。破冰是要更新当前处理元素的结尾,为当前和之前一个元素结尾的min值。这是处理相交的情况。 不相交的情况,箭的count直接++
class Solution {
public int findMinArrowShots(int[][] points) {
if(points.length == 0) {
return 0;
}
Arrays.sort(points, (a,b)->{
return Integer.compare(a[0], b[0]);
});
int result = 1;
for(int i=1; i<points.length; i++) {
if(points[i][0] > points[i-1][1]) {
result++;
}
else {
points[i][1] = Math.min(points[i][1], points[i-1][1]);
}
}
return result;
}
}