860.柠檬水找零
public class Solution {public bool LemonadeChange(int[] bills) {int cnt5=0;int cnt10=0;for(int i=0;i<bills.Length;i++){if(bills[i]==5){cnt5++;}else if(bills[i]==10){cnt5--;cnt10++;}else if(cnt10!=0){cnt5--;cnt10--;}else{cnt5-=3;}if(cnt5<0){return false;}}return true;}}
该题直接分情况讨论,收到五元、十元、二十元三种情况,分别对五元和十元两种面值计数,二十元则有两种补发十元不等于零则一张五一张十,若等于零直接三张无,最终如果五元数量为负数则说明补不起所以就返回False,否则为True。
406.根据身高重建队列
public class Solution {public int[][] ReconstructQueue(int[][] people) {Array.Sort(people,(a,b)=>{if(a[0]!=b[0]){return b[0]-a[0];}else{return a[1]-b[1];}});var ans=new List<int[]>();for(int i=0;i<people.Length;i++){int[] p=people[i];ans.Insert(p[1],p);}return ans.ToArray();}
}
该题只能一次一个条件的来,首先按照身高由大到小进行一个排序,第二趟则按照比他身高高的人数依次向前进行一个插入操作,这样就保证了他前面的人都比他高。
452.用最少数量的箭引爆气球
public class Solution {public int FindMinArrowShots(int[][] points) {int cnt = 1;if(points.Length==0){return 0;}Array.Sort(points,(a,b)=>{if(a[1]==b[1]){return 0;}elsereturn a[1]>b[1]?1:-1;});for(int i=1;i<points.Length;i++){if(points[i][0]>points[i-1][1]){cnt++;}else{points[i][1]=Math.Min(points[i][1],points[i-1][1]);}}return cnt;}
}
对于本题来说首先应该对区间起点进行从小到大的排序,然后比较当前区间的起点和上一个区间终点的关系(重叠区间),如果重叠Cnt不变,不重叠则Cnt++,如果重叠需要更新当前射箭的终点,比较当前终点和上一个区间的终点,谁小取谁,依次往后遍历,最终返回Cnt数值。