ThreeSum問題求解

2021-08-15 19:30:43 字數 653 閱讀 6756

問題描述:乙個包含n個元素的陣列,在其中選出3個元素 a,b,c 能否使得三個元素之和等於0.

問題擴充套件:

1.當三個元素可以重複時,例如 int a=,此時可以選擇 -1,,1,2,即三個元素可以包含重複的元素。

2. 當三個元素不能包含重複的元素的時候,例如 int a=,此時不能選擇-1,-1,2 因為-1被選擇了兩次。

3. 當陣列中的元素能夠被多次選擇時,例如 int a=,此時可以選擇0,0,0這三個元素之和為0

4. 判斷是否存在三個元素之和為0,並且記錄是哪三個元素。

5. 當元素個數不是3,而是k個的時候,求k個元素之和為0.

問題解析:當求兩個元素之和等於0的時候,我們首先想到的是把整個陣列排序,然後分別用兩個指標,第乙個指標指向第乙個元素,最後乙個指向最後乙個元素,當兩個元素之和大於0的時候將最後乙個指標前移,當兩個元素之和小於0的時候將第乙個指標後移。(別問我怎麼首先就想到這麼做,我也不知道。既然在乙個陣列中選兩個元素之和為定值,那肯定是向那個值不斷靠近,如果陣列是無序的每次移動的結果都不可控,所以肯定得把陣列排好序,為了更少的遍歷陣列那麼乙個從最大的位置乙個從最小的位置,不斷修正,只用遍歷一遍就好)

既然兩個元素之和為0這麼求取,那麼三個元素為0,則可以先選擇乙個a,然後求兩個元素之和為-a。

問題**:

問題 A 迷宮求解問題

時間限制 10 sec 記憶體限制 2048 mb 提交 574 解決 306 提交 狀態 討論版 用乙個m n的矩陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對給定的迷宮,求出找到的第一條從入口到出口的通路,或得到沒有通路的結論。我們指定 1 迷宮的入口為矩陣的左上角 1,1 迷宮...

約瑟夫問題求解

終於又到了大名鼎鼎的約瑟夫問題了。約瑟夫問題也算是近代比較知名的乙個演算法問題了,有著成熟的演算法,其中有著強行模擬,還存在著一些神奇的數學方法,哈哈。今天我又來了強行模擬。啊,啊,啊。瞎。下面是問題的描述 題目描述 description 乙個旅行社要從n名旅客中選出一名幸運旅客,為他提供免費環球...

求解迷宮問題

求解迷宮問題 include using namespace std const int m 6 const int n 8 int maze m 2 n 2 m n大小的迷宮,0可前進,1通行受阻。並且在迷宮的周圍鑲上邊框 int mark m 2 n 2 儲存訪問標記,0未訪問,1已訪問 int...