写点什么

“算法考核没过,老板找我聊了 3 个小时”:离职程序员重刷数学题

作者:钟奕礼
  • 2022-12-03
    湖南
  • 本文字数:1350 字

    阅读完需:约 4 分钟

前言

我依稀记得,第一次接触算法是在高中的时候,用尺子规范的在作业本上画流程图,不同的形状对应不同的流程,什么椭圆开始与结束,还有各种代表条件、判断的四边形图。


而且,我现在编程的时候依旧有这样的习惯,在某个业务块需要用到某些算法的时候,我都会先在纸上画出完整的流程图,把所有的可能性标出来,然后进行步骤缩减,给出最优解。

建议一些写代码写得比较复杂的朋友可以先试试这样的方式,尤其是在有算法需求的代码上。

算法的重要性

有些朋友认为编程最重要的运用工具,运用框架,多掌握一些技术点,这些确实是成为大家职业瓶颈的重要因素。但是,真正决定你能否成为大神的是——算法。

跟学生时代一样,那些数学成绩好的人,往往就是同学眼里的学霸。

算法通常需要程序员有较强的逻辑思维能力,所以你会发现,很多大神写出的代码都是非常工整且简洁的。

程序员小陈就很不巧遇到一件跟算法有关的事情,公司突然组织考察算法,结果 10 道题 8 道答错。被老板叫到办公室,进行了长达三个小时的深度聊天。第二天,程序员小陈就主动离职了,一直在家刷算法题,据说是从高中数学开始看起的。

这里来两个腾讯的算法题吧:

1、小 Q 定义了一种数列称为翻转数列:

给定整数 n 和 m, 满足 n 能被 2m 整除。对于一串连续递增整数数列 1, 2, 3, 4...,每隔 m 个符号翻转一次,最初符号为'-';。

例如 n=8,m=2,数列就是:-1, -2, +3, +4, -5, -6, +7, +8。

而 n=4,m=1,数列就是:-1, +2, -3, + 4。

小 Q 现在希望你能帮他算算前 n 项和为多少。

解析:

输入描述:

输入包括两个整数 n 和 m(2 <= n <= 109, 1 <= m), 并且满足 n 能被 2m 整除。

输出描述:

输出一个整数, 表示前 n 项和。

输入例子 1:

8 2

输出例子 1:

8

答案:

解题思路:一个数列共有 n/2m 组,每一组的和为 m^2 所以,前 n 项和为:(n/2m)*(m^2)=m*n/2

using namespace std; typedef long long LL; int main() {   LL n, m;   cin >> n >> m;   cout<<n*m/2<<endl;}
复制代码

2、牛牛和羊羊正在玩一个纸牌游戏。这个游戏一共有 n 张纸牌, 第 i 张纸牌上写着数字 ai。

牛牛和羊羊轮流抽牌,牛牛先抽,每次抽牌他们可以从纸牌堆中任意选择一张抽出,直到纸牌被抽完。

他们的得分等于他们抽到的纸牌数字总和。

现在假设牛牛和羊羊都采用最优策略,请你计算出游戏结束后牛牛得分减去羊羊得分等于多少。

解析:

输入描述:

输入包括两行。


第一行包括一个正整数 n(1 <= n <= 105),表示纸牌的数量。


第二行包括 n 个正整数 ai(1 <= ai <= 109),表示每张纸牌上的数字。

输出描述:

输出一个整数,表示游戏结束后牛牛得分减去羊羊得分等于多少。

输入:

3 2 7 4

输出:

5

答案:

# coding=utf-8 while 1:     num=int(raw_input())     l=sorted(map(int,raw_input().split()))     tar=num%2     sumA=0     sumB=0    fori inrange(num):         ifi%2==tar:              sumA+=l[i]         elifi%2!=tar:               sumB+=l[i]       printabs(sumA-sumB) break
复制代码




算法

二分查找

冒泡排序算法

插入排序算法

快速排序算法

希尔排序算法

归并排序算法

桶排序算法

基数排序算法

剪枝算法

回溯算法

最短路径算法

最大子数组算法

最长公共子序算法

最小生成树算法




以上资料:算法学习内容、算法与数据结构脑图、面试题含答案我都已经打包好了,免费获取,需要的小伙伴可以+ VX: mxk6072

用户头像

钟奕礼

关注

还未添加个人签名 2021-03-24 加入

还未添加个人简介

评论

发布
暂无评论
“算法考核没过,老板找我聊了3个小时”:离职程序员重刷数学题_Java_钟奕礼_InfoQ写作社区