劍指Offer學習 題45 撲克牌順子

2021-09-22 18:05:43 字數 1714 閱讀 1267

題目:

ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王(一副牌原本是54張_)…他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!!「紅心a,黑桃3,小王,大王,方片5」,「oh my god!」不是順子…ll不高興了,他想了想,決定大\小 王可以看成任何數字,並且a看作1,j為11,q為12,k為13。上面的5張牌就可以變成「1,2,3,4,5」(大小王分別看作2和4),「so lucky!」。ll決定去買體育彩票啦。 現在,要求你使用這幅牌模擬上面的過程,然後告訴我們ll的運氣如何, 如果牌能組成順子就輸出true,否則就輸出false。為了方便起見,你可以認為大小王是0。

思路:

1、使用快速排序,對5個數進行排序;

2、使用zerocount對陣列中0的個數進行計數,使用count對陣列中兩個相鄰數字間需要補零的個數進行計數;

3、判斷zerocount和count的大小,若zerocount大於等於count,返回true;反之返回false。

程式:

public

class

subject45

int[

] arr =

sort

(numbers,

0, numbers.length -1)

; int zerocount =0;

//記錄0的個數

int count =0;

//記錄相鄰數字之間需要補0的個數

for(int i =

0; i < numbers.length; i ++)if

(i < numbers.length -

1&& numbers[i]!=0

&& numbers[i +1]

!=0) count += arr[i +1]

- arr[i]-1

;}}return zerocount >= count ?

true

:false;}

public

static int[

]sort

(int[

] array, int start, int end)

int pivot = array[start]

; int left = start;

int right = end;

while

(left < right)

if(left < right)

while

(left < right && array[left]

< pivot)

if(left < right)

} array[left]

= pivot;

sort

(array,

0, left -1)

;sort

(array, left +

1, end)

;return array;

}public

static

void

main

(string args)

; system.out.

println

(iscontinuous

(arr));

}}

劍指offer 45 撲克牌順子

題目 ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子.ll不高興了,他想了想,決定...

劍指offer系列(45)撲克牌順子

題目描述 ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子.ll不高興了,他想了想,...

劍指offer 45撲克牌順子

題目描述 ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子 ll不高興了,他想了想,...