8000 完成判断是否是顺子的函数。 · ssjssh/javaalgorithm@bdb22b6 · GitHub
[go: up one dir, main page]

Skip to content

Commit bdb22b6

Browse files
author
shengshijun
committed
完成判断是否是顺子的函数。
1 parent c23e66d commit bdb22b6

File tree

3 files changed

+74
-4
lines changed

3 files changed

+74
-4
lines changed

src/main/java/ssj/algorithm/math/MathUtil.java

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,9 +492,74 @@ public static double sum(double[] arr) {
492492
public static int sum(int[] arr) {
493493
Preconditions.checkNotNull(arr);
494494
int result = 0;
495-
for (double num : arr) {
495+
for (int num : arr) {
496496
result += num;
497497
}
498498
return result;
499499
}
500+
501+
/**
502+
* 判断传递进来的int数组中保存的数字是不是顺子
503+
* 大小王使用0表示。其他的数必须大于0
504+
*
505+
* @param numbers
506+
* @return
507+
*/
508+
public static boolean isContinuous(int[] numbers) {
509+
Preconditions.checkNotNull(numbers);
510+
Preconditions.checkArgument(numbers.length >= 5);
< 8000 /td>
511+
512+
numbers = littleSort(numbers);
513+
int normal_code = 0;
514+
for (int i = 0; i < numbers.length; i++) {
515+
if (numbers[i] < 0) {
516+
throw new IllegalArgumentException("code should be bigger than 0:" + numbers[i]);
517+
} else if (numbers[i] > 0) {
518+
normal_code = i;
519+
break;
520+
}
521+
}
522+
523+
//按照扑克中的规则,一副牌中最多有两个王
524+
if (normal_code >= 2) {
525+
throw new IllegalArgumentException("too many guest");
526+
}
527+
int lord_count = normal_code;
528+
529+
for (int i = normal_code + 1; i < numbers.length; i++) {
530+
if (numbers[i - 1] == numbers[i]) {
531+
return false;
532+
} else if ((numbers[i - 1] + 2) == numbers[i]) {
533+
if (lord_count > 0) {
534+
lord_count--;
535+
} else {
536+
return false;
537+
}
538+
} else if ((numbers[i - 1] + 1) != numbers[i]) {
539+
return false;
540+
}
541+
}
542+
return true;
543+
}
544+
545+
/**
546+
* 使用插入排序实现小数组的排序
547+
*
548+
* @param numbers
549+
* @return
550+
*/
551+
private static int[] littleSort(int[] numbers) {
552+
Preconditions.checkNotNull(numbers);
553+
554+
for (int i = 1; i < numbers.length; i++) {
555+
for (int j = i - 1; j >= 0; j--) {
556+
if (numbers[j + 1] < numbers[j]) {
557+
ArrayUtil.swap(numbers, j, j + 1);
558+
} else {
559+
break;
560+
}
561+
}
562+
}
563+
return numbers;
564+
}
500565
}

src/test/java/ssj/algorithm/Main.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import ssj.algorithm.math.MathUtil;
44

5-
import java.lang.reflect.Array;
65
import java.util.Arrays;
76

87
/**
@@ -11,7 +10,7 @@
1110
public class Main {
1211

1312
public static void main(String[] args) {
14-
Integer[] data = new Integer[]{1, 234};
15-
System.out.println(MathUtil.min(data));
13+
int[] data = new int[]{1,2,3,4,34,1, 234};
14+
// System.out.println(Arrays.toString(MathUtil.littleSort(data)));
1615
}
1716
}

src/test/java/ssj/algorithm/math/MathUtilTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,10 @@ public void testProbabilitySumCount() {
101101
System.out.println(MathUtil.sum(MathUtil.probabilitySumCount(11, 6)));
102102
System.out.println(MathUtil.sum(MathUtil.probabilitySumCount(2, 6)));
103103
}
104+
105+
@Test
106+
public void testIsContinuous() {
107+
assertTrue(MathUtil.isContinuous(new int[]{5, 3, 4, 1, 2}));
108+
assertTrue(MathUtil.isContinuous(new int[]{5, 3, 4, 1, 0}));
109+
}
104110
}

0 commit comments

Comments
 (0)
0