學習筆記 C語言5(演算法設計提高)

2021-08-30 04:42:49 字數 2508 閱讀 7036

目錄

1. 二分查詢

2. leetcode 34,search for a range(區間查詢)

3. leetcode 200. number of islands(島嶼數量)

演算法複雜度是指演算法在編寫可執行程式後,執行時所需要的時間資源和記憶體資源。演算法設計一般更在意時間和計算資源的開銷,而對空間資源則不太介意。

二分查詢又稱折半查詢,首先陣列中的元素時按公升序排列,將陣列中間位置的關鍵字與查詢關鍵字比較:

1)如果兩者相等,則查詢成功

2)否則利用中間位置將表分成前、後兩個子陣列:

重複以上過程,直到找到滿足條件的記錄,便查詢成功,或者直到字表不存在為止,此時查詢不成功。

二分查詢的時間複雜度log(n),整體時間複雜度nlog(n)。

實現**:

普通迴圈版本:

int binary_search(int sort_array,int n,int target)

else if(targetsort_array[mid)

} return 0;

}

遞迴版本:

int binary_search(int sort_array,int begain,int end,int target)

}

題目描述:給定乙個排序陣列nums(nums中有重複元素)與目標值target,如果target在nums裡出現,則返回target所在區間的左右端點下標,[左端點,右端點],如果target在nums裡未出現,則返回[-1,-1]。

使用二分法分別求出左右端點的位置,**如下:

//查詢左端點位置

int left_bound(int nums,int n,int target)

} return -1;

}//查詢右端點位置

int right_bound(int nums,int n,int target)

begin=mid+1;

} else if (targetnums[mid])

} return -1;

}

題目描述:用乙個二維陣列代表一張地圖,這張地圖由字元「0」與字元「1」組成,其中「0」字元代表水域,「1」字元代表小島土地。小島「1」被水「0」所包圍,當小島土地「1」在水平和垂直方向相連線時,認為是同一塊土地。求這張地圖中小島的數量。如下圖分別是1和3個小島:

演算法分析:

第一步:

第二步:

乙個完整的搜尋示意圖: 

完整**實現:

遞迴深度搜尋——小島數量

#include #include #define maxn 500

void dfs(int mark[maxn], char **grid,

int gridrowsize, int gridcolsize,

int x, int y);

static const int dy = ;

int i;

for (i = 0; i < 4; i++)

if (mark[newx][newy] == 0 && grid[newx][newy] == '1') }}

int numislands(char **grid, int gridrowsize, int gridcolsize) ;

int i, j;

for (i = 0; i < gridrowsize; i++)}}

return island_num;

}int main();

int i, j;

grid = (char **)malloc(sizeof(char *) * 10);

for (i = 0; i < 4; i++)

} printf("%d\n", numislands(grid, 4, 5));

for (i = 0; i < 10; i++)

free(grid);

return 0;

}

C語言學習筆記5

持續更新一些 c語言學習 的筆記。上次說到語言程式的編寫和執行,那麼接下來進行一下補充。編寫和執行過程 使用文字編輯工具編寫c 程式,其檔案字尾為.cpp,這種形式的程式稱為原始檔 source code 然後用編譯器將源 轉換成二進位制形式,檔案字尾為.obj,這種形式的程式稱為目標 object...

C語言學習筆記5

回顧 1.負數的二進位制轉換規則 2.操作符 算數操作符,邏輯操作符,位操作符,三目操作符 作業 1.提示奇數或偶數 2.提示正負數 移位操作符 左移 和右移 3 2 0000 1100 左移固定在右邊補0 12 2 0000 0011 有符號數字右移左邊補符號位 無符號數字右移左邊補0 取位址操作...

C語言學習筆記5

int num 5 int p num type 列印時的值 第二次列印的值 源位址的值 陣列內的值 p 1020 10 p 和 的優先順序相同,根據結合性是從右往左,所以p先和後自增運算子 相結合,操作會在表示式完成後進行自增,也就是先取出p位址裡的值,然後p的下標後移一位type 列印時的值 第...