前言

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

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

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

算法的重要性

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

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

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

程序员小陈就很不巧遇到一件跟算法有关的事情,公司突然组织考察算法,结果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

算法

二分查找

冒泡排序算法

插入排序算法

快速排序算法

希尔排序算法

归并排序算法

桶排序算法

基数排序算法

剪枝算法

回溯算法

最短路径算法

最大子数组算法

最长公共子序算法

最小生成树算法

以上资料:算法学习内容、算法与数据结构脑图、面试题含答案,我都已经打包好了,有需要的小伙伴私信我【111】,即可获取~