给定n个整数构成的数组A={a1,a2,…,an}和整数x。判断A中是否存在两个元素ai和aj,使得ai+aj=x。为了求解该问题,首先用归并排序算法对数组A进行从小到大排序,然后判断是否存在ai+aj=x,具体如下列伪代码所示,则求解该问题时排序算法应用了①算法设计策略,整个算法的时间复杂度为②。
i=1;j=n;
while i<j do
if ai+aj=x return true;
else if ai+aj>x
j--;
else
i++;
return false;
假设不带头结点的整数单链表L的结点类型为(val,next),以下算法求L中所有结点值之和,请填空。
nt sums(ListNode *L) { if(L==NULL) return 0; else return ①+sums( ② ); }
1+cntx(t->left,x)+cntx(t->right,x);
cntx(t->left,x)+1+cntx(t->right,x);
cntx(t->left,x)+cntx(t->right,x)+1;
cntx(t->right,x)+1+cntx(t->left,x);
cntx(t->right,x)+cntx(t->left,x)+1;
1+cntx(t->right,x)+cntx(t->left,x);
cntx(t->left,x)+cntx(t->right,x);
cntx(t->right,x)+cntx(t->left,x);