1、增强for+while(68ms,97%;81.4MB,73%)
1 bool lemonadeChange(vector<int>& bills) { 2 int five = 0; 3 int ten = 0; 4 int change; 5 for (auto bill:bills) { 6 // 需要找零的金额 7 change = bill - 5; 8 // 首先找10块 9 while (change >= 10 && ten > 0) { 10 change -= 10; 11 ten--; 12 } 13 // 然后找5块 14 while (change >= 5 && five > 0) { 15 change -= 5; 16 five--; 17 } 18 // 无法找零 19 if (change > 0) return false; 20 if (bill == 10) ten++; 21 if(bill==5) five++; 22 } 23 return true; 24 }
2、普通for+while(80ms,80%;81.4MB,73%)
1 bool lemonadeChange(vector<int>& bills) { 2 int five = 0; 3 int ten = 0; 4 int change; 5 for (int i = 0; i < bills.size(); i++) { 6 // 需要找零的金额 7 change = bills[i] - 5; 8 // 首先找10块 9 while (change >= 10 && ten > 0) { 10 change -= 10; 11 ten--; 12 } 13 // 然后找5块 14 while (change >= 5 && five > 0) { 15 change -= 5; 16 five--; 17 } 18 // 无法找零 19 if (change > 0) return false; 20 if (bills[i] == 10) ten++; 21 if(bills[i]==5) five++; 22 } 23 return true; 24 }
2、增强for+if_else(72ms,94%;81.5MB,11%)
1 bool lemonadeChange(vector<int>& bills) { 2 //记录5美元的数量 3 int sum5=0; 4 //记录10美元的数量 5 int sum10=0; 6 for(auto bill:bills){ 7 //如果收到5美元,直接收下就行 8 if(bill==5) 9 sum5++; 10 //如果收到10美元,只要有一张5美元就行 11 else if(bill==10){ 12 if(sum5==0) 13 return false; 14 sum5--; 15 sum10++; 16 } 17 //如果收到20美元,只要有10美元+5美元,或者3张5美元就行 18 //优先使用10+5的,因为5美元使用场景更多 19 else{ 20 if(sum5&&sum10){ 21 sum5--; 22 sum10--; 23 } 24 else if(sum5>=3) 25 sum5-=3; 26 else 27 return false; 28 } 29 } 30 return true; 31 }
4、普通for+if_else(100ms,19%;81.5MB,20%)
1 bool lemonadeChange(vector<int>& bills) { 2 //记录5美元的数量 3 int sum5=0; 4 //记录10美元的数量 5 int sum10=0; 6 for(int i=0;i<bills.size();i++){ 7 //如果收到5美元,直接收下就行 8 if(bills[i]==5) 9 sum5++; 10 //如果收到10美元,只要有一张5美元就行 11 else if(bills[i]==10){ 12 if(sum5==0) 13 return false; 14 sum5--; 15 sum10++; 16 } 17 //如果收到20美元,只要有10美元+5美元,或者3张5美元就行 18 //优先使用10+5的,因为5美元使用场景更多 19 else{ 20 if(sum5&&sum10){ 21 sum5--; 22 sum10--; 23 } 24 else if(sum5>=3) 25 sum5-=3; 26 else 27 return false; 28 } 29 } 30 return true; 31 }