数列按升序排列,有一个数字排错,如何纠错?
2017-12-21 16:20
411 查看
我觉得这个可以用类似于2分法来进行查找出出错的那个数字.我把出错分为2种:
1. 相邻交换(1,2,3,5,4,): 这种出错其实可以看成是5错,也可以看成是4错
2. 不相邻插入(1,2,4,5,3):这种出错只有3是错的
考虑到这个,我用1-9做例子: 1-9一共9个数字,则出错有3中情况:
1. 出错的数字仍然在同一边比如(1,3,2,4,5,6,7,8,9)
2. 出错的数字在另外一边(1,3,4,5,6,2,7,8,9)
3. 出错的数字在中间(1,3,4,5,2,6,7,8,9)
观察可得
1. 如果中间的数字没变,说明该错出现在同一边(如1)
2. 如果中间的数字比相邻左边的数字相差1(绝对值),且比相邻右边数字相差1(绝对值),说明该错非中间数字,继续递归左右两半,直到3或者4情况
3. 如果中间的数字比相邻左边的数字相差1(绝对值),且比相邻右边数字相差不等于1(绝对值),说明该错非中间数字,而是右边的数字,复原则结束
4. 如果中间的数字比相邻左边的数字相差不等于1(绝对值),且比相邻右边数字相差等于1(绝对值),说明该错非中间数字,而是左边的数字,复原则结束
5.如果中间的数字变化,放回原位,复原则结束
转自:https://www.zybang.com/question/8d06734b0dee719f3b4ae9ba8f2b62ff.html
1. 相邻交换(1,2,3,5,4,): 这种出错其实可以看成是5错,也可以看成是4错
2. 不相邻插入(1,2,4,5,3):这种出错只有3是错的
考虑到这个,我用1-9做例子: 1-9一共9个数字,则出错有3中情况:
1. 出错的数字仍然在同一边比如(1,3,2,4,5,6,7,8,9)
2. 出错的数字在另外一边(1,3,4,5,6,2,7,8,9)
3. 出错的数字在中间(1,3,4,5,2,6,7,8,9)
观察可得
1. 如果中间的数字没变,说明该错出现在同一边(如1)
2. 如果中间的数字比相邻左边的数字相差1(绝对值),且比相邻右边数字相差1(绝对值),说明该错非中间数字,继续递归左右两半,直到3或者4情况
3. 如果中间的数字比相邻左边的数字相差1(绝对值),且比相邻右边数字相差不等于1(绝对值),说明该错非中间数字,而是右边的数字,复原则结束
4. 如果中间的数字比相邻左边的数字相差不等于1(绝对值),且比相邻右边数字相差等于1(绝对值),说明该错非中间数字,而是左边的数字,复原则结束
5.如果中间的数字变化,放回原位,复原则结束
转自:https://www.zybang.com/question/8d06734b0dee719f3b4ae9ba8f2b62ff.html
相关文章推荐
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 给定一个数列a1,a2,a3,...,an和m个三元组表示的查询,对于每个查询(i,j,k),输出ai,ai+1,...,aj的升序排列中第k个数。
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 给定一个数列a1,a2,a3,...,an和m个三元组表示的查询,对于每个查询(i,j,k),输出ai,ai+1,...,aj的升序排列中第k个数。
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 一个字符串既含有字母又含有数字且字母和数字随意排列如何取出其中所有的数字并进行排序
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 【codeforces 691 D】【并查集 或者 dfs】aps in Permutation【给一个1到N的排列,M个操作,每次可以交换X Y位置上的数字,求可以得到的最大字典序的数列】
- 小练习1:如何将一个纯数字字符串升序,得到一个新字符串
- 给一个整数数组,对数组中的每个整数中的所有数字按照升序排列(如101排序后为011)请写一个方法,输出排序后的数组中的最大数。 例如有一个数组: 101、132、375,排序后11、123、357,
- 5.一个三维数组,如何根据最后一维的数字大小正序排列,当然同时要保证索引的关联
- 在一个升序排列好的数列里面找到最长的等差数列
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 一个有序数组数组,给出和为s的两个数字和连续正数数列