首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C語言數組去重計數邏輯錯誤修正

     編輯:程式設計疑難解答

錯誤代碼分析

if (nums[i] != nums[j]) n++;  // 錯誤:單次不等不代表唯一

內層循環每次比較不等就計數,導致嚴重高估。

正確邏輯

for (i = 1; i < 10; i++) {
    for (j = 0; j < i; j++) {
        if (nums[i] == nums[j]) break;  // 發現重複即跳出
    }
    if (i == j) n++;  // 遍歷完前綴無重複,計數+1
}

算法複雜度

  • 雙層循環:O(n²),n=10 可接受
  • 大數據量建議:排序後去重 O(n log n) 或哈希集合 O(n)

改進版本(排序法)

qsort(nums, 10, sizeof(int), cmp);
int n = 1;
for (i = 1; i < 10; i++)
    if (nums[i] != nums[i-1]) n++;

關鍵點

去重核心是「與所有已確認唯一元素比較」,而非「與任一元素比較」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved