📣 独立日限时特惠: VIP通行证立减$68
楼主: cynthiazp
跳转到指定楼层
上一主题 下一主题
收起左侧

脸家加面,似乎他家最近新题很多?

全局:
  1.     public int getNumber_dfs_Duplicate(int[] nums, int k) {
  2.         List<List<Integer>> res = new ArrayList<>();
  3.         backtrack(nums, k, res, new ArrayList<Integer>(), new boolean[nums.length], 0, 0);
  4.         return res.size();
  5.     }

  6.     private void backtrack (int[] nums, int k, List<List<Integer>> res, ArrayList<Integer> tmp, boolean[] used, int sum, int start) {
  7.         if (tmp.size() > 0 && sum < k) {
  8.             res.add(new ArrayList<>(tmp));
  9.         }

  10.         for (int i = start; i < nums.length; i++) {
  11.             if (i > 0 && nums[i] == nums[i-1] && !used[i-1]) {
  12.                 continue;
  13.             }

  14.             tmp.add(nums[i]);
  15.             used[i] = true;
  16.             backtrack(nums, k, res, tmp, used, tmp.get(0) + nums[i], i + 1);
  17.             used[i] = false;
  18.             tmp.remove(tmp.size() - 1);
  19.         }
  20.     }
  21. }
复制代码
回复

使用道具 举报

🔗
baudelaire 2017-8-7 03:22:51 | 只看该作者
全局:
请问各位大神第一题对应lc上哪些题? 我刷题少勿喷
回复

使用道具 举报

🔗
pomme2016 2017-8-7 07:40:05 | 只看该作者
全局:
真淘蛮 发表于 2017-8-6 21:46
nums = { 1}, k = 2 呢, 30楼的code , 跑完是0?

1+1=2 not < 2
so ans = 0
回复

使用道具 举报

🔗
pomme2016 2017-8-7 07:41:32 | 只看该作者
全局:
跑跑的白日梦 发表于 2017-8-7 01:40
自己写的,比较直接的解法:

补充内容 (2017-8-6 09:42):

我也发现有重复的时候,需要进去一个一个backtracking核对答案个数
回复

使用道具 举报

🔗
真淘蛮 2017-8-7 09:10:53 | 只看该作者
全局:
pomme2016 发表于 2017-8-7 07:40
1+1=2 not < 2
so ans = 0

ans = 0 不对啊, 1 < 2, ans 应该是1
回复

使用道具 举报

🔗
lixiaonin 2017-8-8 09:28:53 | 只看该作者
全局:
发现没有一个人讲清楚为什么two pointer 和 取power这么可以行得通,我小黑板上画了一下,可能是这样子的:
为了直观我在楼主基础上加了一个数成为:
A = [2, 3, 4, 5, 7]  
K = 8

用two pointer方法在取power处打印,得到两个范围:
【2-5】=>8
【3-4】=>2
最后结果8+2=10

【2-5】和【3-4】这俩范围怎么得来的很简单不说,可是怎么得出的8和2的呢?
按照下面这样,左边界保持,右边的 x-1 个数找subset数量,所以就是pow(2, x-1), 解法中这个x-1刚好就是j-i
{ [2,3,4,5], [2,3,5], [2,4,5], [2,5], [2,3,4], [2,4], [2,3], [2] }
拆成=> [2] · {[3,4,5], [3,5], [4,5], [5], [3,4], [4], [3], []} (【3,4,5】这个集合的所有子集)

{ [3,4], [3] }
拆成=> [3] · { [4], [] } (【4】这个集合的所有子集)

# 是不是这样看着舒服多了。。。
# 我要是说错了请大家指正!
回复

使用道具 举报

🔗
Darkduke68 2017-8-11 12:07:43 | 只看该作者
全局:
真淘蛮 发表于 2017-8-6 21:46
nums = { 1}, k = 2 呢, 30楼的code , 跑完是0?

1(Min) + 1(Max)  不小于2 啊, 所以是0, 有什么问题吗。。。empty subset 又没有元素,具体算不算1个面试官说了算呗。。
回复

使用道具 举报

🔗
Darkduke68 2017-8-11 12:16:30 | 只看该作者
全局:
lixiaonin 发表于 2017-8-8 09:28
发现没有一个人讲清楚为什么two pointer 和 取power这么可以行得通,我小黑板上画了一下,可能是这样子的: ...

取power就是基本排列组合,每个元素出现不出现一共2个情况, n个元素就是2^n. 题目没说不允许重复,可以这么算。

即使不允许重复,答案也是排列组合算出来。(k1+1) * (k2+1) *....*(kn+1), where kn is the count of each unique element from i+1 to j-1
回复

使用道具 举报

🔗
woshiduga 2017-8-12 04:07:20 | 只看该作者
全局:
没人考虑重复问题吗
回复

使用道具 举报

🔗
knight0clk 2017-9-23 00:57:37 | 只看该作者
全局:
pomme2016 发表于 2017-8-5 13:27
我自己想一开始用的DP,然后发现真的可以双指针呢。
感觉下面写的代码是对的,跑了几个test case

你这个没法处理重复元素,重复元素情况怎么办?谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表