目錄
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 列印時的值 第...