这题要求去重, 排序, 那么就先暴力 $n^2$ 去重走起.
因为算法没啥好讲的所以本篇讲的是一个语法技巧
这里我为了少用一个flag
变量所以使用了一个for
循环全部结束后运行的方法(相当于python
中的$for…else$语句)
我们知道for
循环有三个子表达式, 定义为 $for(expr1;expr2;expr3)$ , 其中 $expr1$ 表示初始化语句, 在进入for
循环时调用, $expr2$ 表示循环控制语句, 在 $expr2$ 值为 $true$ 是才会进行一次循环, $expr3$ 是递增语句.
我们分析 $for…else$ 语句会发现, $else$ 子句运行条件是 $for$ 子句完全运行完毕后, 即当 $expr2$ 不成立的时候就会运行 $else$ 子句. 那么我们就会想到短路运算, 只有 $op1$ 不成立才会运行 $op2$, 即逻辑或运算符. 那么结构为: for (expr1; expr2 || expr-else; expr3)
.
但是我们发现如果expr-else
的值是true
的话就会继续循环, 我们要保证expr-else
的值一定是false
, 所以使用逗号表达式, 这个表达式从左到右运算并返回最后一个子句的值, 那么就可以写成如下形式: for (expr1; expr2 || (expr-else, false); expr3)
, 这就相当于 for (expr1; expr2; expr3) { ... } else { expr-else }
了
代码如下:
1 |
|