题目分析:
分析:直接四层循环可能会超时,可以考虑先将两个数能构成的平方和保存在map内里,如果在前两层循环的时间,发现剩下的数并不能由两个数的平方构成,就直接continue跳过~否则就判断第三层循环,然后用sqrt(num - a * a - b * b - c * c)算出最后一个数temp,看它是否为整数,如果是整数就输出。这里三层循环+判断也能过了。哈希乃至过不了民间测试。
贪心:如果第 i 个位置的数不是 i (假设为x),那么就直接将这个数与第 x 个位置的数相交换:b[x] = x b = b[x];这样每次操作一定可以至少让一个瓶子回到它原来的位置。
每一次都从第一个数开始遍历,如果就不符合条件的数就交换,时间复杂度O(N^2),本题的数据范围是1≤N≤10000,显然是可以过的