算是一次更深一些的思考吧,對於查資料表,通常都只有乙個**,如果翻看資料手冊,就會看到資料表中對應的數值只是乙個典型值,而實際情況是感測器的值必定會在某個範圍內波動,對應乙個上限值和乙個下限值。通常使用這個典型值就可以了,方法就是這篇部落格:
但如果需要查詢兩個資料表,分別是上限表和下限表,那該怎麼辦呢?順序查表?有沒有可能落空呢?我想到乙個比較簡單的辦法,只要在範圍內,必定會返回乙個數值。
先對adc採集的數值分別在兩個資料表中進行查詢,得到兩個相近的值(假設是溫度),然後再進一步判斷(判斷是否在該溫度的上下限中,若不在兩個溫度的上下限中,則找最接近的溫度),得到最接近的值(溫度)。前提是感測器的上下限不存在重合部分,感測器的數值對應唯一溫度
#include #include #include #include #define debug_output 0
#define array_size 40
uint16_t lower_limit[40] =
;uint16_t higher_limit[40] =
;uint16_t search_based_on_dichotomy(uint16_t key, const uint16_t *a, uint16_t n);
int main(void)
else if((higher_limit[return_val2] > random_val) && (random_val > lower_limit[return_val2]))
else
else
} }
return 0;
}/**
* @brief 基於二分查詢法,需要陣列是遞減序列
* @param key 要查詢的值
* @param a 陣列元素首位址
* @param n 陣列元素個數
* @note 對傳入引數進行驗證
* @note 不是陣列元素也會查詢成功,關鍵是如何判斷介於兩者之間,終止條件已做更改
* @note 若到兩數的間隔相等,則會返回較小的數
* @attention 此處要求陣列元素個數2^8 =256應用限制較多,因此改為uint16_t
*/uint16_t
search_based_on_dichotomy(uint16_t key, const uint16_t *a, uint16_t n) ///< 傳入型別更改
while(low < high)
else if(key > a[mid]) ///< 遞減序列更改
else
else
}}else if(key < a[mid]) ///< 遞減序列更改
else
else}}
}return 0;
}
查詢兩個陣列相同元素
攢rp ing 一場面試的一道演算法題,題目如下 有兩個公升序的陣列,在這兩個陣列裡面有且只有乙個相同的元素,考慮時間和空間複雜度,找到該元素,禁用js中所有方法,單純演算法題 emmmmm,為何和我之前的不一樣 話不多說,上 我真是越來越喜歡動手敲一下了 function foo arr 1,ar...
如何迴圈比較兩個陣列 比較兩個陣列的內容是否相同
需求 設計乙個方法,用於比較兩個陣列的內容是否相同 思路 1.定義兩個陣列,分別使用靜態初始化完成陣列元素的初始值 2.定義乙個方法,用於比較兩個陣列的內容是否相同 3.比較兩個陣列的內容是否相同,按照下面的步驟實現就可以了 首先比較陣列長度,如果長度不相同,陣列內容肯定不相同,返回false 其次...
查詢錶類演算法 兩個陣列的交集 II
給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2,2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 4,9 說明 高階 class solution else listtemplist new arr...