代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
贪心算法
作者:
龙城
/ 发布于
2012/7/23
/
495
<div>package main; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Random; public class Main { /** * 测试 */ public static void main(String[] args) { // 1.随机构造一批任务 List<Pair<Integer>> inputList = new ArrayList<Pair<Integer>>(); Random rand = new Random(); for (int n=0; n<20; ++n) { Integer left = rand.nextInt(100); Integer right = left + rand.nextInt(100) + 1; Pair<Integer> pair = new Pair<Integer>(left, right); inputList.add(pair); } // 将任务列表按结束时间排序(也就是根据right字段进行排序) sortByRight(inputList); printPairList(inputList); // 执行算法 List<Pair<Integer>> outputList = algorithm(inputList); System.out.println(); printPairList(outputList); } /** * 贪心算法 * @param inputList * @return 使数量最多的任务方案 */ public static <T extends Comparable<T>> List<Pair<T>> algorithm(List<Pair<T>> inputList) { if (null==inputList || inputList.size()==0 || inputList.size()==1) { return inputList; } sortByRight(inputList); List<Pair<T>> outputList = new ArrayList<Pair<T>>(); int last = 0; outputList.add(inputList.get(last)); int intputSize = inputList.size(); for (int m=1; m<intputSize; ++m) { Pair<T> nextPair = inputList.get(m); T nextLeft = nextPair.getLeft(); Pair<T> lastOutPair = inputList.get(last); T lastRight = lastOutPair.getRight(); int flag = nextLeft.compareTo(lastRight); if (flag >= 0) { outputList.add(nextPair); last = m; } } return outputList; } /** * 对传入的List<Pair<T>>对象进行排序,使Pair根据right从小到大排序。 * @param inputList */ private static <T extends Comparable<T>> void sortByRight(List<Pair<T>> inputList) { CompareByRight<T> comparator = new CompareByRight<T>(); Collections.sort(inputList, comparator); } /** * 打印一个List<Pair<T>>对象。 * @param inputList */ private static <T extends Comparable<T>> void printPairList(List<Pair<T>> inputList) { for (Pair<T> pair : inputList) { System.out.println(pair.toString()); } } } /** * 根据Pair.right比较两个Pair。用于Conlections.sort()方法。 * @param <T> */ class CompareByRight<T extends Comparable<T>> implements Comparator<Pair<T>> { @Override public int compare(Pair<T> o1, Pair<T> o2) { T r1 = o1.getRight(); T r2 = o2.getRight(); int flag = r1.compareTo(r2); return flag; } } /** * 代表一个任务对象。有点装逼用模板来写了。left表示开始时间,right表示结束时间。 * @param <T> */ class Pair<T extends Comparable<T>> { private T left; private T right; public Pair(T left, T right) { this.left = left; this.right = right; } @Override public String toString() { return "[left=" + left.toString() + ',' + "right=" + right.toString() + ']'; } public T getLeft() { return left; } public void setLeft(T left) { this.left = left; } public T getRight() { return right; } public void setRight(T right) { this.right = right; } }
试试其它关键字
贪心算法
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
龙城
贡献的其它代码
(
1
)
.
贪心算法
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3