【刷题篇】贪心算法(一)

文章目录

分割平衡字符串

cpp 复制代码
class Solution {
public:
    int balancedStringSplit(string s) {
        int len=s.size();
        int cnt=0;
        int balance=0;
        for(int i=0;i<len;i++)
        {
            if(s[i]=='R')
            {
                balance--;
            }
            else
            {
                balance++;
            }
            if(balance==0)
            {
                cnt++;
            }
        }
        return cnt;
    }
};

买卖股票的最佳时机Ⅱ

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int maxprofit=0;
        int day=prices.size();
        for(int i=1;i<day;i++)
        {
            if(prices[i-1]<prices[i])
            {
                maxprofit+=prices[i]-prices[i-1];
            }
        }
        return maxprofit;
    }
};

跳跃游戏

cpp 复制代码
class Solution {
public:
    bool canJump(vector<int>& nums) {
        int maxlen=0;
        int len=nums.size();
        for(int i=0;i<len;i++)
        {   //判断是否能到当前位置
            if(maxlen>=i)
            {
                maxlen=max(maxlen,i+nums[i]);
            }
            else
            {   //到不了当前位置就说明也就到不了最后的位置
                return false;
            }
            //当最大路径大于总里程时就可以返回了
            if(maxlen>len-1)
            {
                return true;
            }
        }
        return true;
    }
};

钱币找零

假设1元、2元、5元、10元、20元、50元、100元的纸币分别由c0,c1,c2,c3,c4,c5,c6张。现在要用这些钱来支付K元,至少要用多少张纸币?

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

struct moneycmp
{
	bool operator()(vector<int>& array1, vector<int>& array2)
	{
		return array1[0] > array2[0];
	}
}cmp;
//0:是面值  1:是数量
int MoneyMat(vector<vector<int>>& moneymat, int money)
{
	int cnt = 0;
	sort(moneymat.begin(),moneymat.end(),cmp);
	//遍历面值
	for (auto& array : moneymat)
	{
		int c = 0;
		c = money / array[0];
		//确保取得是最小值,保证张数不会超
		c=min(c, array[1]);
		money -= c * array[0];
		cnt += c;
	}
	if (money != 0)
	{
		return -1;
	}
	return cnt;
}

int main()
{                              //面值,数量
	vector<vector<int>> mat = { {100,5} ,{50,3},{20,4},{5,5},{2,5},{1,10} };
	int money=0;
	cin >> money;
	int count=MoneyMat(mat,money);
	cout << count << endl;
	return 0;
}
相关推荐
哭泣的眼泪4081 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
Ysjt | 深1 小时前
C++多线程编程入门教程(优质版)
java·开发语言·jvm·c++
ephemerals__1 小时前
【c++丨STL】list模拟实现(附源码)
开发语言·c++·list
Microsoft Word2 小时前
c++基础语法
开发语言·c++·算法
天才在此2 小时前
汽车加油行驶问题-动态规划算法(已在洛谷AC)
算法·动态规划
一只小小汤圆2 小时前
opencascade源码学习之BRepOffsetAPI包 -BRepOffsetAPI_DraftAngle
c++·学习·opencascade
legend_jz2 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
嘿BRE2 小时前
【C++】几个基本容器的模拟实现(string,vector,list,stack,queue,priority_queue)
c++
莫叫石榴姐3 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘