前言
霸哥依稀記得,第一次接觸演算法是在高中的時候,用尺子規范的在作業本上畫流程圖,不同的形狀對應不同的流程,什么橢圓開始與結束,還有各種代表條件、判斷的四邊形圖,
而且,霸哥現在編程的時候依舊有這樣的習慣,在某個業務塊需要用到某些演算法的時候,我都會先在紙上畫出完整的流程圖,把所有的可能性標出來,然后進行步驟縮減,給出最優解,
建議一些寫代碼寫得比較復雜的朋友可以先試試這樣的方式,尤其是在有演算法需求的代碼上,
演算法的重要性
有些朋友認為編程最重要的運用工具,運用框架,多掌握一些技術點,這些確實是成為大家職業瓶頸的重要因素,但是,真正決定你能否成為大神的是——演算法,
跟學生時代一樣,那些數學成績好的人,往往就是同學眼里的學霸,
演算法通常需要程式員有較強的邏輯思維能力,所以你會發現,很多大神寫出的代碼都是非常工整且簡潔的,
程式員小陳就很不巧遇到一件跟演算法有關的事情,公司突然組織考察演算法,結果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
演算法
二分查找
冒泡排序演算法
插入排序演算法
快速排序演算法
希爾排序演算法
歸并排序演算法
桶排序演算法
基數排序演算法
剪枝演算法
回溯演算法
最短路徑演算法
最大子陣列演算法
最長公共子序演算法
最小生成樹演算法
以上資料:演算法學習內容、演算法與資料結構腦圖、面試題含答案,我都已經打包好了,添加下方小助手免費獲取

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/106322.html
標籤:其他
