C語言資料結構與演算法每日系列(1)兩數之和

2021-10-09 09:27:26 字數 2184 閱讀 9298

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

示例:給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

方法(1):暴力法

#include #include int* twosum(int* nums, int numssize, int target, int* returnsize)}}

return res;

}int main ()

; int numssize = 4;

int target = 23;

int returnsize = 0;

int *result = null;

result = twosum(nums, numssize, target, &returnsize);

for (int i = 0; i < returnsize; i++)

}

方法2: hash法

#include #include typedef struct hash_data  hash_data;

typedef struct hash_table hash_table;

/* init hash_table */

int hash_init(hash_table* table, int width)

hash_data** tmphash = malloc(sizeof(hash_data*) * width);

table->head = tmphash;

memset(table->head, 0, width * sizeof(hash_data*));

if (table->head == null)

table->hash_width = width;

return 0;

}/* free hash_table */

int hash_free(hash_table table, int width)

}free(table.head);

table.head = null;

}table.width = width;

}/* the function of hash */

int hash_addr(hash_table table, int key)

/* insert key-value to hash_table */

int hash_insert(hash_table table, int key, int value)

tmpdata->key = key;

tmpdata->value = value;

int table_index = hash_addr(table, key);

tmpdata->next = table.head[table_index];

table.head[table_index] = tmpdata;

return 0;

}/* select key-value form hash_table */

hash_data* hash_find(hash_table table, int key, int value)

ele_head = ele_head->next;

}return null;

}int* twosum(int* nums, int numssize, int target, int* returnsize)

for (int i = 0; i < numssize; i++)

}return res;

}int main ()

; int numssize = 4;

int target = 23;

int returnsize = 0;

int *result = null;

result = twosum(nums, numssize, target, &returnsize);

for (int i = 0; i < returnsize; i++)

}

C語言資料結構1 資料結構和演算法

如果沒有接觸過資料結構這門課程,或者說只是單單聽過這個名詞。那麼在含義方面,資料結構對於我們來說是非常陌生的。在了解一門課程之前,我們總是要知道這門課程要學習什麼。在了解資料結構之前,我們需要知道什麼是資料。對於人類來說,一切可以讓我們獲取資訊的東西都是資料。我們可以通過乙個動物的叫聲判斷是什麼動物...

資料結構系列1 演算法初識

主要研究問題 核心 時間與空間複雜度 使用大o記號 這個為最壞的情況,是演算法的上界,忽略常數係數 時間 基本操作次數 會變指令條數 空間 占用記憶體位元組數 區別 空間可以再利用 時間空間可以互換 hash表 常見時間複雜度分析方法 1.輸入輸出 確定演算法的下界 2.數迴圈次數 迴圈次數相乘,通...

資料結構與演算法系列1 什麼是資料結構和演算法

資料結構是計算機儲存,組織資料的方式,就是怎麼儲存資料的意思 資料 是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並給計算機處理的符號集合 資料元素 是組成資料的,有一定意義的基本單位,在計算機中通常作為整體處理,也被稱為記錄 資料項 乙個資料元素可以由若干資料項的組成 資料物件...