`
QuarterLifeForJava
  • 浏览: 176270 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

简单注水算法

阅读更多
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @version 0.1
 * @author  QuarterLifeForJava
 * 说明:1.思路见程序下面的图
 *     2.未经大量反复测试
 *     3.必有更好更精简方式,你可以写的更好
 */
public class Test {
	
	//简单测试下
	public static void main(String[] args) {
		int test1[] = new int[]{3,1,1,3,5,1,6,8,1,4,6,2,6};
		System.out.println(core(test1));
		int test2[] = new int[]{1,2,3,4,5};
		System.out.println(core(test2));
		int test3[] = new int[]{5,4,3,2,1};
		System.out.println(core(test3));
		int test4[] = new int[]{5,4,3,2,1,2,3};
		System.out.println(core(test4));
		int test5[] = new int[]{5,4};
		System.out.println(core(test5));
		int test6[] = new int[]{3,9,4,8,1,1,1,3};
		System.out.println(core(test6));
	}
	
	//核心处理
	public static int core(int array[]){
		int capacity = 0;//容量
		int temp[] = Arrays.copyOf(array, array.length);
		StringBuilder sb = new StringBuilder();
		if(array.length<3){
			return capacity;
		}else{
			for (int i = 0; i < array.length; i++) {
				if(i==array.length-1){
					temp[array.length-1] = 0;
					sb.append(temp[array.length-1]);
					break;
				}
				if(array[i]>array[i+1]){
					temp[i] = 0;//0高
				}else{
					temp[i] = 1;//1低
				}
				sb.append(temp[i]);
			}
		}
		int length = sb.toString().length();
		Pattern p = Pattern.compile("0+1+0");
		Matcher m = p.matcher(sb.toString());
		while(m.find()){
			capacity+=calculateEach(array, m.start(), m.end()-1);
			m.region(m.end()-1, length);
		}
		return capacity;
	}
	
	//计算每组匹配
	public static int calculateEach(int array[],int start,int end){
		int temp = 0;
		int count = 0;
		if(array[start]>=array[end]){
			temp = array[end];
		}else{
			temp = array[start];
		}
		for (int i = start+1; i < end; i++) {
			//特殊处理类似5,4,7,8,9的情况
			count+=((temp-array[i]<=0)?0:(temp-array[i]));
		}
		return count;
	}
	
}


  • 大小: 145.8 KB
分享到:
评论

相关推荐

    VS_Code_注水算法_通信算法_

    在VisualStudio中实现通信当中的注水算法,编写简单。

    MIMO-WATERFILLING.zip_MIMO 功率分配_mimo注水算法_svd 注水_注水 matlab_注水 mim

    MIMO注水原理的简单运用,有助于理解SVD分解,注水算法,不同发送天线上如何进行功率分配

    MIMO功率分配算法,注水原理

    word文档中贴有MIMO功率分配注水原理算法的Matlab程序,以及仿真结果,简单介绍了一下注水原理和平均功率分配算法下的信道容量公式

    经典注水功率分配matlab代码

    根据Goldsmith的Wireless Communications第十章MIMO里面的知识点写的,简单实用。这个是MATLAB函数文件。

    UnderIay模式下认知无线电OFDM系统多用户资源分配

    首先利用公平性的子载波分配方法为认知用户分配子载波,然后利用子载波分配结果,将复杂的多用户资源分配问题转化为简单的单用户功率分配问题,并利用一种复杂度较低的线性封顶注水算法对子载波功率的分配进行求解。...

    C程序范例宝典(基础代码详解)

    4.1 简单问题算法 184 实例120 任意次方后的最后三位 184 实例121 计算π的近似值 184 实例122 小于500的所有勾股数 185 实例123 能否组成三角形 186 实例124 偶数拆分 187 实例125 乘积大于和的数 ...

    c语言经典案例

    第3章 算法入门 15 实例013 任意次方后的最后三位 16 实例014 计算某日是该年的第几天 16 实例015 婚礼上的谎言 18 实例016 百元买百鸡 19 实例017 打渔晒网问题 20 实例018 判断三角形的类型 22 实例019 直接插入...

    蓝丽留言版

    安装方面:非常简单,几乎无需改动或根据您的要求少加改动,上传至服务器即可正常运行 安全方面:在本人已知的Asp,Asp.net存在的(数据提交,Sql注入,Cookies欺骗,跨站提交,注水 提交)等安全隐患上下了许多工夫,经仔细...

Global site tag (gtag.js) - Google Analytics