网易首页 > 网易号 > 正文 申请入驻

拿到腾讯11级offer,总包160万。。

0
分享至

(关注数据结构和算法,了解更多新知识)

35岁拿到腾讯11级的offer,总包160w,涨幅15%左右。说实话总包看起来很高,但这个涨幅才15%也太少了,跳槽工资涨幅至少要达到30%以上才有意义,既然目前工作比较稳定,并且年龄也大了,还是不要折腾了。


--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第40题:组合总和 II。

问题描述

来源:LeetCode第40题

难度:中等

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次 。

注意:解集不能包含重复的组合。

示例1:


输入: candidates = [10,1,2,7,6,1,5], target = 8, 输出: [ [1,1,6], [1,2,5], [1,7], [2,6] ]

示例2:


输入: candidates = [2,5,2,1,2], target = 5, 输出: [ [1,2,2], [5] ]

  • 1 <= candidates.length <= 100

  • 1 <= candidates[i] <= 50

  • 1 <= target <= 30

问题分析

昨天我们刚讲过和这题类似的一道题 ,不过昨天那道题数组中是没有重复数字的,而今天这题数组中可能会 有 重复数字 ,如果有重复数字就会出现重复的组合,所以解这题的关键点是怎么过滤掉重复的组合, 我们画个图看下:


选择的过程可以把它看作是一棵树,因为每个数字最多只能选择一次,所以选择完当前数字之后下一步要从他的下一个数字开始。上面图中因为有相同的数字,所以结果出现了重复。只需要把重复的剪掉即可。

在计算之前我们需要先对数组排序,这样重复的数字就会挨着了,当出现重复数字的时候,前面数字构成的子集实际上是包含后面数字构成的所有子集,所以当出现重复数字的时候我们需要把后面数字构成的分支剪掉即可。

JAVA:

public List
       
 > combinationSum2( int[] candidates,  int target) {     List > ans =  new ArrayList<>();     Arrays.sort(candidates); // 先排序     dfs(ans,  new ArrayList<>(), candidates, target,  0);      return ans; } private void dfs(List > ans, List  path,                   int[] candidates,  int target,  int start)  {      if (target ==  0) {         ans.add( new ArrayList<>(path));          return;     }      for ( int i = start; i < candidates.length; i++) {          // 因为是有序的,后面的值越来越大,直接终止。          if (target < candidates[i])              break;          if (i > start && candidates[i] == candidates[i -  1])              continue;  // 去掉重复的,后面分支就不要选择了         path.add(candidates[i]); // 选择         dfs(ans, path, candidates, target - candidates[i], i +  1);         path.remove(path.size() -  1); // 撤销选择     } }

C++:

public:
    vector

 > combinationSum2(vector

  &candidates, int target) {         vector

 > ans;         vector

  path;         sort(candidates.begin(), candidates.end());// 先排序         dfs(ans, path, candidates, target, 0);         return ans;     }     void dfs(vector

 > &ans, vector

  &path,              vector

  &candidates, int target, int start) {         if (target == 0) {             ans.emplace_back(path);             return;         }         for (int i = start; i < candidates.size(); i++) {             // 因为是有序的,后面的值越来越大,直接终止。             if (target < candidates[i])                 break;             if (i > start && candidates[i] == candidates[i - 1])                 continue; // 去掉重复的,后面分支就不要选择了             path.emplace_back(candidates[i]);// 选择             dfs(ans, path, candidates, target - candidates[i], i + 1);             path.pop_back();// 撤销选择         }     }







C:

int cmp(const void *a, const void *b) {
    return *(const int *) a - *(const int *) b;
}

void dfs(int **ans, int *path, int *candidates, int candidatesSize, int target,          int start, int *returnSize, int **returnColumnSizes, int pathCount) {
    if (target == 0) {
        ans[*returnSize] = (int *) malloc(pathCount * sizeof(int));
        memcpy(ans[*returnSize], path, pathCount * sizeof(int));
        (*returnColumnSizes)[*returnSize] = pathCount;
        (*returnSize)++;
        return;
    }
    for (int i = start; i < candidatesSize; i++) {
        // 因为是有序的,后面的值越来越大,直接终止。
        if (target < candidates[i])
            break;
        if (i > start && candidates[i] == candidates[i - 1])
            continue; // 去掉重复的,后面分支就不要选择了
        path[pathCount++] = candidates[i];// 选择
        dfs(ans, path, candidates, candidatesSize, target - candidates[i],
            i + 1, returnSize, returnColumnSizes, pathCount);
        --pathCount;// 撤销选择
    }
}

int **combinationSum2(int *candidates, int candidatesSize, int target,                       int *returnSize, int **returnColumnSizes) {
    // 先进行排序
    qsort(candidates, candidatesSize, sizeof(int), cmp);
    int n = 3000;
    *returnSize = 0;
    int **ans = malloc(n * sizeof(int *));
    *returnColumnSizes = malloc(n * sizeof(int));
    int *path = malloc(n * sizeof(int));
    dfs(ans, path, candidates, candidatesSize, target, 0, returnSize, returnColumnSizes, 0);
    return ans;
}

Python:

def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
    def backtrack(num: int, start: int):
        if num == 0:
            ans.append(path[:])
            return
        for i in range(start, len(candidates)):
            # 因为是有序的,后面的值越来越大,直接终止。
            if num < candidates[i]:
                break
            if i > start and candidates[i] == candidates[i - 1]:
                continue  # 去掉重复的,后面分支就不要选择了
            path.append(candidates[i])  # 选择
            backtrack(num - candidates[i], i + 1)
            path.pop()  # 撤销选择

    candidates.sort()  # 先对数组进行排序
    ans = []  # 需要返回的结果
    path = []
    backtrack(target, 0)
    return ans

笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。


特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
独行侠三节全队仅有5次助攻 过去3年任何一场比赛中最少!

独行侠三节全队仅有5次助攻 过去3年任何一场比赛中最少!

直播吧
2024-06-07 10:34:12
客大欺店?名记嘲讽:朱婷就是搅屎棍,还向蔡斌提过分要求引众怒

客大欺店?名记嘲讽:朱婷就是搅屎棍,还向蔡斌提过分要求引众怒

尘语者
2024-06-05 10:34:19
政治分析家:乌军士兵正大规模叛逃至俄军一方

政治分析家:乌军士兵正大规模叛逃至俄军一方

俄罗斯卫星通讯社
2024-06-05 15:20:29
HTC发布新机预告图!将于6月12日发布U24系列

HTC发布新机预告图!将于6月12日发布U24系列

手机中国
2024-06-06 20:37:23
马季徒孙李寅飞直播说:我添加郭德纲三次,都没通过,还怎么走动

马季徒孙李寅飞直播说:我添加郭德纲三次,都没通过,还怎么走动

气质华尔兹
2024-06-06 14:41:49
为什么女生去KTV上班基本上就算废了?看完评论才知道KTV水有多深

为什么女生去KTV上班基本上就算废了?看完评论才知道KTV水有多深

察颜观生活事
2024-06-06 15:11:48
警察叔叔:每天的报警内容都是这么离谱,习惯了。。。

警察叔叔:每天的报警内容都是这么离谱,习惯了。。。

新动察
2024-06-05 15:48:53
马伊琍宠着、黄渤护着,长得不漂亮却让大咖轮流作配,她啥来头?

马伊琍宠着、黄渤护着,长得不漂亮却让大咖轮流作配,她啥来头?

闻星盼夏
2024-06-05 18:20:03
京东买的格力空调,上门安装1500,直接退货了

京东买的格力空调,上门安装1500,直接退货了

奇奇怪怪的冒险
2024-06-06 12:15:17
美媒:前NBA球员德隆蒂-韦斯特因违反缓刑条例和拒捕被捕

美媒:前NBA球员德隆蒂-韦斯特因违反缓刑条例和拒捕被捕

直播吧
2024-06-06 23:12:11
中国第一个被终身监禁的“大老虎”,索贿2.5亿元!曾将价值5000亿铅矿贱卖给“黑老大”

中国第一个被终身监禁的“大老虎”,索贿2.5亿元!曾将价值5000亿铅矿贱卖给“黑老大”

天闻地知
2024-06-05 10:06:04
热刺兜售孙兴慜!欧洲豪门开价5000万,今夏携手穆里尼奥,冲欧冠

热刺兜售孙兴慜!欧洲豪门开价5000万,今夏携手穆里尼奥,冲欧冠

体坛春秋
2024-06-06 22:45:04
9月悬了!中美货币战争再打响!美联储降息难产,中国如何应对?

9月悬了!中美货币战争再打响!美联储降息难产,中国如何应对?

云姐闲聊
2024-06-06 09:10:53
乌克兰频繁与中国互动,副外长抵达中国,执意要求中方出席峰会?

乌克兰频繁与中国互动,副外长抵达中国,执意要求中方出席峰会?

三分亮剑
2024-06-06 14:09:38
3分变1分,引出国足第1祸首:连续3问其责,对手1语可谓诛心

3分变1分,引出国足第1祸首:连续3问其责,对手1语可谓诛心

话体坛
2024-06-07 03:29:23
重庆33岁男子杀妻后跳楼,现场惨烈,事因曝光,更多细节流出

重庆33岁男子杀妻后跳楼,现场惨烈,事因曝光,更多细节流出

温柔看世界
2024-06-06 14:59:13
外省姑娘到成都吃面,被内江的微辣辣哭了,在店门口哭着要报警

外省姑娘到成都吃面,被内江的微辣辣哭了,在店门口哭着要报警

大苏专栏
2024-06-05 22:46:24
局势骤变!中俄同时收到“战书”,这次不是美国,出乎所有人意料

局势骤变!中俄同时收到“战书”,这次不是美国,出乎所有人意料

星辰故事屋
2024-06-05 20:11:05
彭胜玉:美国对中国现在不是在遏制,而是在备战

彭胜玉:美国对中国现在不是在遏制,而是在备战

华山穹剑
2024-06-04 19:31:31
辛纳首登NO1,成史上第29位球王!

辛纳首登NO1,成史上第29位球王!

网球之家
2024-06-06 13:36:32
2024-06-07 11:14:44
数据结构和算法
数据结构和算法
专门介绍和写算法题解的号
28文章数 0关注度
往期回顾 全部

头条要闻

菲香蕉对华出口锐减 越南成中国最大的香蕉进口来源国

头条要闻

菲香蕉对华出口锐减 越南成中国最大的香蕉进口来源国

体育要闻

国足进球功臣捂脸沮丧 伊万表情凝重

娱乐要闻

汤唯抵达巴黎将担任奥运火炬手

财经要闻

身陷退市股的投资者:我的钱瞬间没了

科技要闻

马斯克创造人类历史,SpaceX星舰试飞成功

汽车要闻

蔚来第三品牌"萤火虫"首款车型定位10-20万元级

态度原创

游戏
本地
房产
健康
公开课

《龙腾世纪4》没有多人元素:纯粹的单人叙事驱动游戏

本地新闻

我和我的家乡|踏浪营口,心动不止一夏!

房产要闻

震撼!8800亩存量宅地清单曝光!未来的三亚楼市,太炸裂!

晚餐不吃or吃七分饱,哪种更减肥?

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版