首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

求最大值,初学者,求教

2012-04-22 
求最大值,菜鸟,求教有个字符串数组,字符串内只有数字和“.”,比如String[] str{.15, 7.., 402, ..3

求最大值,菜鸟,求教
有个字符串数组,字符串内只有数字和“.”,比如String[] str={".15", "7..", "402", "..3"},代表有4个字符串,每个元素长度都为 3,现在将数组里面元素进行随机组合成字符串(打乱顺序),
比如将元素按"..3.154027.."的顺序相连。然后截取其中连续的片段"154027"。连续的数字的总和为1+5+4+0+2+7=19。这个19是所有组合里面得到的最大的值。Java怎么实现啊。

[解决办法]

探讨

引用:

引用:

引用:

Java code

public static void main(String[] args) {
String[] strs = { ".15", "7..", "402", "..3" };// 字符串数组,你可以随意组合
String str = ""; // 把上面的数组拼成……

[解决办法]
Java code
import java.util.Random;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {    public static String[] random(String[] strs){        int index = 0;        for(int i = 0;i<strs.length;i++){            index =Math.abs(new Random().nextInt()%strs.length);            String temp = strs[i];            strs[i] = strs[index];            strs[index] = temp;        }        return strs;    }    public static void main(String[] args) {        String[] str={".15", "7..", "402", "..3",".6.","9.8"};        Test.random(str);        StringBuffer sb = new StringBuffer();        for(String s:str){            sb.append(s);        }        String temp = sb.toString();        Pattern p = Pattern.compile("\\d+");        Matcher m = p.matcher(temp);        int sum = 0;        int Maxsum = 0;        String maxSumStr ="";        System.out.println(sb);        while(m.find()){            String s = m.group(0);            for(int i=0;i<s.length();i++){                sum+=Integer.parseInt(String.valueOf((s.charAt(i))));            }            if(sum > Maxsum){                Maxsum = sum;                maxSumStr = s;                sum = 0;            }            else{                sum=0;//刚才漏掉这句。            }        }        System.out.println("最大值:"+Maxsum);        System.out.println("最大子串"+maxSumStr);    }}
[解决办法]
讨论了这么久,其实题目本质上是个排列组合求最大值的问题,跟随机没啥关系。

但我认为,就这个题目而言,根本无需这么复杂的去组合它,从需求而言,其实可以考虑一次循环就搞定了。

这个题目中的最大数实际上基本是 ..xxx + yyy + zzz.. 这种组合方式,计算最大值的时候也是按照单个数字相加的最大值,所以也不需要去考虑拼接方式差异所导致数值大小不一样。

所以在一次循环之内,得到最大的 yyy,xxx,zzz,循环结束后,3个值相加,这题目也就算结束了。

热点排行
Bad Request.