void swapSeq(int *lst, int m, int n);惯例, lst 索引为 1..(m n) "用尽可能少的辅助空间"..... 果然 brainfucking. 函数里定义某数组, 把 b1~bn, a1~am 按顺序复制再拿出来, OK. 不好玩. 直觉告诉我们, 既然是 brainfucking..... Show 实现.
void swapSeq(int *lst, int m, int n) { int i,tmp; if(m n<= 1) return ; for(i=1; i<= m && i<= n; i ) { tmp = lst[i]; lst[i] = lst[m i]; lst[m i] = tmp; } if(m> n) return swapSeq(lst n, m-n, n); if(n> m) return swapSeq(lst m, m, n-m); }
发现可爱的尾递归. OK, 立即抛弃, 上 while~!
void swapSeq(int *lst, int m, int n) { int i,tmp; while(m n> 1) { for(i=1; i<= m && i<= n; i ) { tmp = lst[i]; lst[i] = lst[m i]; lst[m i] = tmp; } if(m> n) { lst = n; m = m-n; } else if(n> m) { lst = m; n = n-m; } else return ; } }
抛弃题目本质. BT 下. BT 无罪.
void swapSeq(int *lst, int m, int n) { int i; if(m n<= 1) return ; for(i=1; i<= m && i<= n; i ) { lst[i]^= lst[m i]; lst[m i]^= lst[i]; lst[i]^= lst[m i]; } if(m> n) return swapSeq(lst n, m-n, n); if(n> m) return swapSeq(lst m, m, n-m); }
其实递归未优化的消耗还是很大的, 开优化另说.
void swapSeq(int *lst, int m, int n) { int i; while(m n> 1) { for(i=1; i<= m && i<= n; i ) { lst[i]^= lst[m i]; lst[m i]^= lst[i]; lst[i]^= lst[m i]; } if(m> n) { lst = n; m = m-n; } else if(n> m) { lst = m; n = n-m; } else return ; } }
没有评论:
发表评论