剑指offer-61

扑克牌中的顺子

扑克牌随机抽五张,判断是不是一个顺子,2~10为数字本身,A为1,j为11,q位12,k为13,大小王可以作为任意的数字(不考虑两端情况,即k与a不连续)

解法一:因为扑克牌类型大小是固定的,不区分花色的话只有14种,其中13种为A-k,大小王为1种,可以先用个大小为14的数组存储每个对应数字出现的次数,0为大小王,除王外,如果某个数字出现1次以上,则不连续;其次判断数组的数字是否连续出现

解法二:只考虑抽取的5个数字,先排序,再从非0点开始遍历是否连续,两非连续数的间隔用0的个数填补,与解法一并无本质差别,解法二方便些

解法二:
bool continueComp(int num1, int num2)
{
	return num1 < num2;
}
bool IsContinuous(int* numbers, int length)
{
	if (numbers == nullptr || length < 0 || (*numbers)<0) return false;
	if (length == 1) return true;
	
	std::sort(numbers, numbers + length, continueComp);
	int zeroCnt = 0;
	int* p1 = numbers;
	while ((*p1) == 0)
	{
		zeroCnt++;
		p1++;
	}
	while (p10)
			{
				if (zeroCnt - cnt < 0) return false;
				else
					zeroCnt -= cnt;
			}
		}
		p1++;
	}
	return true;
}

 

你可能感兴趣的:(剑指)