Facebook 程序媛分享面试真题(手写版题解噢)

2020-09-21 16:14:49 +08:00
 hakunamatata11

小姐姐上岸 Facebook,分享一题面试中遇到的题,Facebook 还是比较爱考原题的。

给定一个可能具有重复数字的列表,返回其所有可能的子集。

点此做题

样例 1:

输入:[0]
输出:
[
  [],
  [0]
]

样例 2:

输入:[1,2,2]
输出:
[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]

解题思路

算法

举例分析

复杂度分析

代码

public class Solution {
    /**
     * @param nums: A set of numbers.
     * @return: A list of lists. All valid subsets.
     */
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        // 排序
        Arrays.sort(nums);
        // dfs 搜索
        Deque<Integer> subset = new ArrayDeque<>(nums.length);
        dfs(nums, 0, subset, res);
        return res;
    }
    private void dfs(int[] nums, int k, Deque<Integer> subset, List<List<Integer>> res) {
        // 当前组合存入 res
        res.add(new ArrayList<>(subset));
        // 为 subset 新增一位元素
        for (int i = k; i < nums.length; ++i) {
            // 剪枝
            if (i != k && nums[i] == nums[i - 1]){
                continue;
            }
            subset.addLast(nums[i]);
            // 下一层搜索
            dfs(nums, i + 1, subset, res);
            // 回溯
            subset.removeLast();
        }
    }
}

[福利放送时间]

Facebook 面试官帮你搞定 90%大厂高频动规题,帮你 14 天突击国内大厂面试最爱考的动态规划题型~

亮点

搜集近 3 年大厂 90%高频动规考题,你想进的,这里都有 字节跳动 /网易 /腾讯 /微软 /百度 /快手 /blibli/美团 /拼多多 /谷歌

搞定 7 大动规题型,吃透面试考点

区间型动态规划 /双序列动态规划 /划分型动态规划 /坐标型动态规划 /序列型动态规划 /背包型动态规划 /状态压缩动态规划

随时可以查看课程噢~ 戳我现在 9 元即可秒杀

折扣码:AB3DF7 (使用方法:点击原价购买,然后在选择优惠框输入折扣码,即可 9 元获得全部课程)

168 次点击
所在节点    推广
2 条回复
GM
2020-09-21 16:50:45 +08:00
点进来确认是不是有推广码。

然后心满意足地离开了。
hakunamatata11
2020-09-22 13:33:00 +08:00
@GM 本来就是推广节点啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/709074

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX