JAVA算法,判断年月的连续性
2 回答
慕桂英546537
TA贡献1848条经验 获得超10个赞
看不明白,同年的话就是每个月都是连续的么?
不同年的呢,?
2050-12特殊年月是何意?
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | public static boolean findThree(String[] years) { boolean flag = false ; all: for ( int i = 0 ; i < years.length; i++) { int num = 0 ; for ( int j = 0 ; j < years.length; j++) { if (years[i].equals(years[j])) num++; if (num == 3 ) flag = true ; break all; } } return flag; } public static boolean tabCheck(String[] years) { //System.out.println(years[i].substring(0, 4)); boolean flag = false ; for ( int i = 0 ; i < years.length - 1 ; i++) { System.out.println(years[i].substring( 0 , 4 )); System.out.println(years[i].substring( 6 , 7 )); if (years[i].substring( 0 , 4 ).equals(years[i + 1 ].substring( 0 , 4 )) && Integer.valueOf(years[i + 1 ].substring( 6 , 7 )) - Integer.valueOf(years[i].substring( 6 , 7 )) > 1 ) flag = true ; break ; } return flag; } public static void main(String[] args) { String[] years={ "2012-01" , "2012-04" , "2012-05" , "2012-06" , "2012-07" , "2050-12" }; if (tabCheck(years)||findThree(years)) System.out.println( "不合格" ); else System.out.println( "合格" ); } ////////////////////////////////////////////////////////////////////// //如果只有两组年月的话,只有两种情况了,一种是同年隔一月, //一种是隔年首尾相接 public boolean IsNext(String[] years){ Arrays.sort(years); if (years[ 0 ].substring( 0 , 4 ).equals(years[ 1 ].substring( 0 , 4 ))){ if (Integer.valueOf(years[ 1 ].substring( 6 , 7 ))-Integer.valueOf(years[ 0 ].substring( 6 , 7 ))== 1 ) return true ; } else if (Integer.valueOf(years[ 1 ].substring( 0 , 4 ))-Integer.valueOf(years[ 0 ].substring( 0 , 4 ))== 1 && Integer.valueOf(years[ 0 ].substring( 6 , 7 ))== 12 &&Integer.valueOf(years[ 1 ].substring( 6 , 7 ))== 1 ){ return true ; } return false ; } |
慕码人8056858
TA贡献1803条经验 获得超6个赞
题目描述不是完全清楚,我先按照我能理解的部分给一个朴素的算法。
输入所有年月至数组date[],扫描若干次:
第一次扫描,删除所有的2050-12,同时判断所有数据是否有序(即:对任意i应该有date[i] <= date[i+1]),若发现任意位置无序则return false;
第二次扫描,判断是否有月份出现多于2次,并删除所有重复,若发现出现多于2次的月份则return false;
第三次扫描,此时对于任一个date[i],date[i+1]应该是其紧接着的下个月。发现不符合者则return false;
三次扫描通过,return true。
添加回答
举报
0/150
提交
取消