我在几十个帖子中看到了2指针算法,即:
OBR|1|METABOLIC PANEL|OBR_filename_1
OBX|1|Glucose|OBR_filename_1
OBX|2|BUN|OBR_filename_1
OBX|3|CREATININE|OBR_filename_1
OBR|2|RFLX TO VERIFICATION|OBR_filename_2
OBX|1|EGFR|OBR_filename_2
OBX|2|SODIUM|OBR_filename_2
OBR|3|AMBIGUOUS DEFAULT|OBR_filename_3
OBX|1|POTASSIUM|OBR_filename_3
我知道它有效。我甚至在接受采访时解决了这个问题。但我无法找到任何正确性证据,甚至无法找到它为何起作用的直观解释。
有人可以提供解释或链接吗?
由于
答案 0 :(得分:3)
想象一下B[i,j] = A[i] + A[j]
的二维数组。请注意,数组中的所有数字从左到右,从上到下依次递增。
设置l=0, r=n-1
- 这是整个2D数组的右上角,元素B [0,n-1],并开始搜索。
对于每个索引对(l,r),我们可以看到三个机会(我省略检查指针交叉点):
找到X = B[l,r]
=>的总和所以我们找到了所需的索引。退出。
X < B[l, r]
=&gt;由于列的排序顺序,此列的所有元素都太大,因此我们可以排除此列,并递减r(向左移动)
X > B[l, r]
=&gt;由于行的排序顺序,此行的所有元素都太小,因此我们可以排除此行,并递增l(向下移动)
请注意,在每个步骤中,我们都会使用可能的解决方案保留在子阵列的右上角,这就是为什么最后两个案例可以工作