思路
- 限制条件
- 数组长度为5
- 数组的数取值为[0,13]
- 顺子的条件
- 5个数不能重复(0除外)
- 最大值-最小值等于4,由于0可以看成任意数;最大值-最小值应小于等于4(小于5)
java
使用Set集合进行判重,发现重复直接返回false
public boolean isStraight(int[] nums) {
Set<Integer> set = new HashSet<>(5);
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int num : nums) {
if (num == 0) {
continue;
}
if (set.contains(num)) {
return false;
}
max = Math.max(max, num);
min = Math.min(min, num);
set.add(num);
}
return max - min < 5;
}
go
go语言没有Set集合,可以使用map实现,map中的key为唯一值,这与Set的特性一致,发现重复直接返回false
func isStraight(nums []int) bool {
max, min := math.MinInt, math.MaxInt
set := make(map[int]struct{}, 5)
for _, v := range nums {
if v == 0 {
continue
}
if _, exists := set[v]; exists {
return false
}
max = getMax(max, v)
min = getMin(min, v)
set[v] = struct{}{}
}
return max-min < 5
}
func getMin(a, b int) int {
if a > b {
return b
}
return a
}
func getMax(a, b int) int {
if a > b {
return a
}
return b
}