0
点赞
收藏
分享

微信扫一扫

Oracle 更换监听端口

目录

柠檬⽔找零(easy)

题目解析

讲解算法原理

编写代码

将数组和减半的最少操作次数(medium)

题目解析

讲解算法原理

编写代码


柠檬⽔找零(easy)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

讲解算法原理

解法(贪⼼):
贪⼼策略:

分情况讨论:
a. 遇到 5 元钱,直接收下;
b. 遇到 10 元钱,找零 5 元钱之后,收下;
c. 遇到 20 元钱:
i. 先尝试凑 10 + 5 的组合;
ii. 如果凑不出来,拼凑 5 + 5 + 5 的组合;

编写代码

c++算法代码:

class Solution
{
public:
 bool lemonadeChange(vector<int>& bills) 
 {
 int five = 0, ten = 0;
 for(auto x : bills)
 {
 if(x == 5) five++; // 5 元:直接收下 else if(x == 10) // 10 元:找零 5 元 {
 if(five == 0) return false;
 five--; ten++;
 }
 else // 20 元:分情况讨论
 {
 if(ten && five) // 贪⼼
 {
 ten--; five--;
 }
 else if(five >= 3)
 {
 five -= 3;
 }
 else return false;
 }
 }
 return true;
 }
};

java算法代码:

class Solution
{
 public boolean lemonadeChange(int[] bills) 
 {
 int five = 0, ten = 0;
 for(int x : bills)
 {
 if(x == 5) // 5 元:直接收下
 {
 five++;
 }
 else if(x == 10) // 10 元:找零 5 元 {
 if(five == 0) return false;
 five--; ten++;
 }
 else // 20 元:分情况讨论
 {
 if(five != 0 && ten != 0) // 贪⼼ {
 five--; ten--;
 }
 else if(five >= 3)
 {
 five -= 3;
 }
 else return false;
 }
 }
 return true;
 }
}

将数组和减半的最少操作次数(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

讲解算法原理

解法(贪⼼):
贪⼼策略:

a. 每次挑选出「当前」数组中「最⼤」的数,然后「减半」;b. 直到数组和减少到⾄少⼀半为⽌。
为了「快速」挑选出数组中最⼤的数,我们可以利⽤「堆」这个数据结构。

编写代码

c++算法代码:

class Solution
{
public:
 int halveArray(vector<int>& nums) 
 {
 priority_queue<double> heap; // 创建⼀个⼤根堆 double sum = 0.0;
 for(int x : nums) // 把元素都丢进堆中,并求出累加和 {
 heap.push(x);
 sum += x;
 }
 sum /= 2.0; // 先算出⽬标和
 int count = 0;
 while(sum > 0) // 依次取出堆顶元素减半,直到减到之前的⼀半以下 {
 double t = heap.top() / 2.0;
 heap.pop();
 sum -= t;
 count++;
 heap.push(t);
 }
 return count;
 }
};

java算法代码:

class Solution
{
 public int halveArray(int[] nums) 
 {
 // 创建⼀个⼤根堆
 PriorityQueue<Double> heap = new PriorityQueue<>((a, b) -> 
b.compareTo(a)); 
 double sum = 0.0;
 for(int x : nums) // 把元素都丢进堆中,并求出累加和
 {
 heap.offer((double)x);
 sum += x;
 }
 sum /= 2.0; // 先算出⽬标和
 int count = 0;
 while(sum > 0) // 依次取出堆顶元素减半,直到减到之前的⼀半以下 {
 double t = heap.poll() / 2.0;
 sum -= t;
 count++;
 heap.offer(t);
 }
 return count;
 }
}
举报

相关推荐

0 条评论