陣列中其餘的排除 第5講 隱性陣列

2021-10-11 16:05:28 字數 1703 閱讀 7569

之前,我們講到了顯性陣列,今天我們來看一下,陣列的另外一種使用方式。

如盤面所示,這個盤面和之前學到的陣列不同。按照我們之前的塗色慣例,紅色的應當是刪數,但上次學到的陣列,紅色的刪數是一定不同於陣列形成的單元格的;這次可不一樣了,是完全在一起了。

我們嘗試這麼去理解它。

首先,我們觀察b4,你發現什麼異樣沒?b4裡面填入7和9的位置,都剛好只有兩處:r46c3。而且,7和9可以填入的位置還剛好是一樣的。這說明了什麼呢?因為兩格填兩個數嘛,所以這兩格肯定必然只能是7和9了,反正7和9的位置只能填在這兩格,剛好兩個數。

所以,這兩格除了7和9,別無其他,所以刪除與7和9以外的其餘所有數字。

這是一種反過來用的陣列,因為區別於之前學到的「顯性」,所以它是一種「隱性」的陣列,故為隱性陣列。而它涉及兩格,所以是隱性數對。

還比較好理解吧。

隱性三陣列就像顯性三陣列一樣,在規格上,它們是一樣的。

如盤面所示,觀察c2,你會發現,能放入3、7、8的位置僅僅只存在於三格之中:r568c2。仔細思考一點:既然只有這三格可以填3、7、8,其他格仔又都不能填這些數字的話,那為了保證這一列要填夠1到9各乙個,自然這三格不會出現「除了填3、7、8還要填其他的數」的情況。因為3、7、8只能填到這裡,如果這三格還有其他的填數的話,那就一定會有至少乙個數字不能填入到這一列,就出現不了1到9各乙個的情況了。顯然這同樣是違背數獨規則的。

那麼,既然剛好只能填在這些位置上,那就說明了這三格肯定只能是3、7、8了,所以其餘無關的候選數全刪掉就可以了。

當規格再大一些的時候,就是真的神一般的存在了。因為原來的結構並不好找,還出個非常大的結構,所以觀察到的話,真的是神一般的存在。

這個結構就非常奇特了。觀察r7,沒乙個提示數。但就算這樣,它也能產生陣列結構。

我們發現,填入1、5、6、7的位置只有這四格,四格、4個數,當然就是我們最熟知的四陣列了!同樣的思考方式和思維,因為1、5、6、7只能填入到這四個單元格裡,所以這四格就只能填入1、5、6、7這四種數字了;否則1、5、6、7必然至少有乙個數字就填入不到這一行裡,導致無法湊夠一套1到9。所以這四個單元格只能是1、5、6、7,而其餘的候選數也都可以直接刪掉了。

這就是隱性四陣列。

講得好吧!咳咳咳,內容太少了,那麼我們下一節就講一下,這個顯隱性陣列到底怎麼觀察,以及它們的關聯。什麼?顯性陣列和隱性陣列還有關聯?下一節我們就說,留乙個懸念。

好了,我們來看乙個練習題,你可以試著做一下(不過這題好像有點難)。就是它:

嘖嘖嘖,看不清麼……吶

這一節是針對講到的技巧做的乙個統一的難度歸納和理論分析。

隱性三陣列

隱性四陣列

陣列中的第k小數

描述 以盡量高效率求出亂序中的k小數 輸入 第一行 陣列長度 第二行 陣列元素 空格隔開 第三性 第幾小的數 輸出 第k小的數 樣例輸入 5 6 1 2 9 3 8 2樣例輸出 解題思路利用快速排序找到主元的位置,判斷主元是第幾小的 主元位置大了剪掉右邊的 主元位置小了剪掉左邊的 假設要找第三小的數...

5shell中的陣列

1 shell不限制陣列的大小,陣列元素的下標從0開始計數 2 獲取陣列中的元素要使用下標 下標可以是乙個整數,也可以是乙個結果為整數的表示式,但是下標必須大於等於0 3 bash shell只支援一維陣列,不支援多維陣列 在 shell 中,用括號 來表示陣列,陣列元素之間用空格來分隔。由此,定義...

陣列中的第K大元素

第k大元素o n 解法,利用快排 剪枝,直接看 吧 include int k 7 第k大,k 0 int sort int array,int low,int high array low key return low void quicksort int array,int low,int hi...