LeetCode30刷-贪心

贪心算法

简介

1.贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在 当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
​ 2.贪心选择是指所求问题的整体最优解可以通过一系列 局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素。
​ 3.当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。运用贪心策略在每一次转化时都取得了最优解。问题的最优子结构性质是该问题可用贪心算法求解的关键特征。贪心算法的每一次操作都对结果产生直接影响。贪心算法对每个子问题的解决方案都做出选择,不能回退。
​ 4.贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。
​ 5.实际上,贪心算法适用的情贪心算法(贪婪算法)况很少。一般对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可以做出判断。

题目

在这里插入图片描述
比如输入RRD,最后输出D,从R的角度来看,每一次都投距离自己最近的D,让与他丧失权力

代码

package Leetcode;

import java.util.LinkedList;
import java.util.Queue;

public class 贪心_参议院 {
    public static void main(String[] args) {
        String str = "RDD";
        System.out.println(predictPartyVictory(str));
    }
    static String predictPartyVictory(String senate){
        Queue<Integer> r = new LinkedList<Integer>();
        Queue<Integer> d = new LinkedList<Integer>();
        int len = senate.length();
        for(int i = 0;i < len;i++){
            if(senate.charAt(i) == 'R'){
                r.offer(i);
            }
            else{
                d.offer(i);
            }
        }
        while(!r.isEmpty() && !d.isEmpty()){
            int rPoll = r.poll();
            int dPoll = d.poll();
            if(rPoll > dPoll){
                d.offer(dPoll + len);
            }
            else{
                r.offer(rPoll + len);
            }
        }
        return !r.isEmpty() ? "R":"D";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值