首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言基礎練習:判斷兩陣列是否有相同元素 (雙層迴圈)

     編輯:關於C

題目

給定兩個整數陣列,判斷是否存在至少一個相同元素。

基本雙層迴圈法 O(n*m)

#include 
#include 

bool has_common(const int *a, size_t na, const int *b, size_t nb) {
    for (size_t i = 0; i < na; i++)
        for (size_t j = 0; j < nb; j++)
            if (a[i] == b[j]) return true;
    return false;
}

int main() {
    int arr1[] = {1,2,3,4,5};
    int arr2[] = {1,2,7,4,9};
    printf("%s\n", has_common(arr1,5, arr2,5) ? "存在相同元素" : "無相同元素");
    return 0;
}

原始碼邏輯錯誤

for (i=0; i<5; i++) {
    for (j=0; j<5; j++)
        if (arr1[i]==arr2[j]) { printf(...); break; }
    break; // 錯誤:外層 break 導致只檢查 i=0 !
}

外層 break 位置錯誤,應移除或放在 if 內配合 goto/旗標跳出雙層。

優化方案 (大陣列)

  1. 排序 + 雙指針:O(n log n + m log m)。
  2. 哈希集合:O(n+m) 平均,需實作或用第三方庫。
  3. 位圖:若數值範圍小 (如 0~1000),用 bool seen[1001] 空間換時間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved