資料結構與演算法練習 陣列查詢,排序

2021-07-11 17:03:45 字數 2177 閱讀 7236

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。

如果對陣列順序排序,一切都簡單,但是會消耗至少n*logn的時間複雜度。使用map集合的特性,用陣列儲存的值作為key,出現次數作為value,這樣時間複雜度可以減低到o(n),同時由於只需要找出最多的乙個數字所以只要這個數字出現次數大於length/2那麼他必定是出現最多的,時間複雜度可以進一步降低到o(n/2)到o(n)之間。同理一般很多字元查詢找出其中最大的幾個字元都可以使用這種方式-利用map集合的特性

public

int morethanhalfnum_solution(int array)

mapmap = new hashmap();

for (int i = 0; i < array.length; i++) else

map.put(array[i], count);

if (count > array.length / 2)

}return

0; }

public

void

testmorethanhalfnum_solution() ;

assertequals(2, solution.morethanhalfnum_solution(array));

}

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。 如果含有就輸出其在陣列 中存在的位置,格式如:「橫座標,縱座標」,如果不包含就返回空string

思路:首先我們選擇從左下角開始搜尋,(為什麼不從左上角開始搜尋,左上角向右和向下都是遞增,那麼對於乙個點,對於向右和向下會產生乙個岔路;如果我們選擇從左下腳開始搜尋的話,如果大於就向右,如果小於就向下)。同理:從右上角搜尋效果一樣。

通過從下往上排除大於target的陣列集合和從左往右排除小於target的陣列集合尋求交集

public

static string find(int array, int target) else

if (array[size][i] < target) else

}return

""; }

int array = , , ,

};public

void testfind()

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

num1,num2分別為長度為1的陣列。傳出引數

將num1[0],num2[0]設定為返回結果

public

arraylistlist = new arraylist();

for (int i = 0; i < array.length; i++) else

}if (list.size() == 2) else

}

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。

遞迴

public

int inversepairs(int array)

getpairs(array, 0);

return count;

}public

int count = 0;

public

void getpairs(int array, int n)

for (int i = n; i < array.length - 1; i++)

}getpairs(array, n + 1);

}

public

void

testinversepairs() ;

int array2 = ;

assertequals(3, solution.inversepairs(array));

assertequals(15, solution.inversepairs(array2));

}

資料結構與演算法 查詢與排序

參考 線性查詢 二分查詢 氣泡排序 插入排序 選擇排序 快速排序 歸併排序 逐個查詢要查詢的物件 include typedef char datatype int mysearch datatype ts,int n,const datatype d int main printf d n mys...

資料結構與演算法(九) 查詢與排序

打卡第九天 快速排序 c 異常處理沒有搞定 lll 排序陣列本身就是陣列旋轉的乙個特例。在對陣列進行排序或查詢時,要注意陣列中有相同數字的特例,比如下面的旋轉陣列的時候 查詢 順序查詢 二分查詢 雜湊表查詢 二叉排序查詢 排序 插入排序 氣泡排序 歸併排序 快速排序 實現快速排序演算法的關鍵在於先在...

Python 資料結構與演算法 查詢與排序

查詢和排序是最基本的演算法,在很多指令碼中都會用到查詢和排序。儘管 python 提供的用於查詢和排序的函式能夠滿足絕大多數需求,但還是有必要了解最基本的查詢和排序演算法,以便在有特殊需求的情況下,可以自己編寫查詢 排序指令碼。基本的查詢方法有順序查詢 二分查詢和分塊查詢等。其中,順序查詢是最簡單的...