数组中邻近最近的相同数字-算法
数组中相邻最近的相同数字-算法
数组中相邻最近的相同数字-算法,例如{1,2,3,4,5,1,2,2,5},最近的相同数字是2,求解答,此问要求算法优化,最好附上代码及注释,冒泡排序不必说
------解决方案--------------------
我的想法:用一个数组(Q)来存放以读取的数.和该数在数组中的位置...
struct A
{
int Value;
int index;
}
如果当前数值在 Q数组中,则判断位置差多少,在和上一次找到了的位置差比较是否要替换,当遍历完成或位置差为1时就结束吧..
------解决方案--------------------
这个好像也是冒泡算法的变体,表示 无住, 坐等高手...
数组中相邻最近的相同数字-算法,例如{1,2,3,4,5,1,2,2,5},最近的相同数字是2,求解答,此问要求算法优化,最好附上代码及注释,冒泡排序不必说
------解决方案--------------------
我的想法:用一个数组(Q)来存放以读取的数.和该数在数组中的位置...
struct A
{
int Value;
int index;
}
如果当前数值在 Q数组中,则判断位置差多少,在和上一次找到了的位置差比较是否要替换,当遍历完成或位置差为1时就结束吧..
------解决方案--------------------
这个好像也是冒泡算法的变体,表示 无住, 坐等高手...
- C/C++ code
#include <iostream> #include <string> #include <vector> using namespace std; int main() { const int max_array = 10; int B[max_array] = {2, 4, 5, 8, 2, 1, 2, 5, 4, 7}; int weizhi = max_array; int value = 0; for (int i = 0; i < max_array; i++) { for (int j = i + 1; j < max_array; j++)//从当前数值 的下一个开始查找 { if (B[i] == B[j])//是否找到了 { if (weizhi > (j - i - 1))//判断位置差是否符合 { weizhi = j - i - 1;//修改数据 value = B[i]; break;//向下遍历所以不用遍历全部 } } } } cout<< "位置差:" << weizhi << "数值:" << value << endl; return 0; }
------解决方案--------------------
用map记录最后一次出现的位置
- C/C++ code
#include <iostream> #include <string> #include <vector> #include <map> using namespace std; int main() { const int max_array = 10; int B[max_array] = {2, 4, 5, 8, 2, 1, 2, 5, 4, 7}; map<int, int> pos; int v = -1, mind = 1000000000, d; for (int i = 0; i < max_array; i++) { if (pos.count(B[i]) > 0) { d = i - pos[B[i]] - 1; if (d < mind) { mind = d; v = B[i]; } } pos[B[i]] = i; } cout << "The min dist is: " << mind << ", value is: " << v << endl; }