7.23 第一次做,无法 AC
7.24 思路少了一点,明天再做一次!
7.25 一次 AC

题目描述


原题链接:https://leetcode-cn.com/problems/bu-ke-pai-zhong-de-shun-zi-lcof/

解题思路:哈希表 + 遍历


K 神题解:https://leetcode-cn.com/problems/bu-ke-pai-zhong-de-shun-zi-lcof/solution

  • HashSet 查找重复数字时间复杂度为 O(1)

  • 如果方法有返回值,那 Java 中 if 语句体里面不能用 return + 返回值!

  • 如果方法没返回值,那 if 语句体才可以使用 return; 来结束语句!


7.24 感悟:

  • 如果只是想要获取一个数组中的最大值或者最小值,直接巧妙地使用 Math.max 和 Math.min 即可,不用对整个数组排序!

  • 这题只需要满足两个条件即可 AC:

    • 给的5张牌中没有重复的元素;
    • 5张牌中除了大小王之外的最大值与最小值相减的结果小于5。
  • 可以看到最大值和最小值相减小于5这个条件中,最大值和最小值与大小王没关系!所以说!遍历数组的时候,如果遇到大小王了直接跳过即可! ```java

class Solution { public boolean isStraight(int[] nums) { Set repeat = new HashSet<>(); int max = 0, min = 14; for(int num : nums) { if(num == 0) continue; // 跳过大小王 max = Math.max(max, num); // 最大牌 min = Math.min(min, num); // 最小牌 if(repeat.contains(num)) return false; // 若有重复,提前返回 false repeat.add(num); // 添加此牌至 Set } return max - min < 5; // 最大牌 - 最小牌 < 5 则可构成顺子 } } ```