編程之美-2.10-尋找數組中的最大值和最小值

1. 簡述    對於一個由N個正數組成的數組,需要比較多少次才能把最大值和最小值找出來?2. 思路    1) 就是遍曆一遍,分別統計最大值和最小值,2*N。    2) 每次遍曆兩個數字,比較一下這兩個數字,大的數字更新最大值,小的數字更新最小值,一共是N/2次,每次比較3次,一共就是3*N/2次比較。   

編程之美-3.9-重建二叉樹

1. 簡述    給定一棵二叉樹,假定每個節點都用唯一的字元表示,具體結構如下:struct NODE {  NODE* pLeft;  NODE* pRight;  char chValue;};    假設已經有了前序走訪和中序遍曆結果,希望通過一個演算法重建這棵樹。   

求數組的最長子數組之和的最大值

1. 題目    給定一整數序列A1, A2,... An (可能有負數),求A1~An的一個子序列Ai~Aj,使得Ai到Aj的和最大。例如: 整數序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和為20。    編程之美上的一道題,也是常考題目之一。2. 解答    屬於基礎動態規劃。遞推公式如下:    假設序列為:a[0],a[1],...,a[n-1], 定義兩個新的序列:p[0],p[1],...,p[n-1],和q[0],q[1],...,

編程之美-2.1-位元中1的個數

1. 簡述    對一個位元組(8bit)的無符號整型變數,求其二進位表示中“1”的個數,要求演算法的執行效率儘可能的高。2. 思路    我對這道題沒有什麼新的發現,也就是再說一遍編程之美上面的解答思路。第一個思路就是一個位一個位的判斷,8位的數字,就是8次。第二個思路就是每次消減數字二進位中的最後一個1,直到數字變為0為止,這個方法僅與數位二進位中的1的個數有關,因此比第一個思路的複雜度更好一點,每次消減最後一個1的方法為num = num & (num-1)。3.

演算法熟記-排序系列-基數排序

1. 簡述1.1 一般方法    計數排序的排序對象一般是整數。    假設待排序數組為 int array[], 數組長度為n。    第一步:開闢臨時數組,int tmp[],數組長度為n。int count,數組長度為10。    第二步:遍曆數組,得到最大數值的位元d,即後面需要d次排序。    第三步:根據個位進行排序,根據十位進行排序,···,根據d位進行排序。               對於根據i位進行排序,其中1<=i<=d              

最大矩陣連乘次數

這題只不過把王曉東書上求最小連乘次數改為了求最大連乘次數,方法還是DP狀態轉移方程:m[i][j] = Max(m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j])  Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <stdio.h>#define N 11int m[N][N]

《編程之美》:求二叉樹中節點的最大距離

看到這題,第一時間就聯想到了求二叉樹深度(通過分別求左右子樹的深度,然後合并(取最大值加1)從而得到了根節點的深度(其實就是分治思想))代碼如下:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->int Depth(Node *p){int l_d , r_d;if(p == NULL) {return 0; } l_d =

《編程之美》:分層遍曆二叉樹

1.輸出二叉樹某一層結點(從左至右)把輸出二叉樹第K層結點轉換成:分別輸出"以該二叉樹根結點的左右子樹為根的兩棵子樹"中第K-1層結點。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->void PrintNodeAtLevel(Node *root , int level){if(!root || level < 0)return

函數實現-memcpy-strcpy-memmove-memset

1. 函數原型(c++ reference)    void * memcpy ( void * destination, const void * source, size_t num );  不能解決某些覆蓋問題。    char * strcpy ( char * destination, const char * source ); 不能解決某些覆蓋問題,根據'\0'表示字串複製終止。    void * memmove ( void * destination, const void

整數劃分和放蘋果問題

整數劃分問題和正整數連續劃分問題:http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1192308.html講的很細緻放蘋果問題:把m個蘋果放到n個盤子裡,允許有空,有多少种放法http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2679 遞迴方程:f(m,n) = f(m,n-1) + f(m-n,n) //每次分有兩種分法f(m,n-1):

編程之美-2.18-數組分割

1. 簡述    有一個無序、元素個數為2n的正整數數組,要求:如何能把這個數組分割為元素個數為n的兩個數組,並使兩個子數組的和最接近?例如有如下數組,1,5,7,8,9,6,3,11,20,17。應該分割為1,3,11,8,20和5,7,9,6,17。2. 思路    方法一,暴力搜尋,遍曆每種分組方法,一共C(2N, N)種組合,複雜度是(2N!/N!),複雜度過高。   

重建二叉樹

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1944這道題是練習遞迴並深刻理解二叉樹遍曆的好題目(編程之美上也有) Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <stdio.h>#include

演算法熟記-排序系列-冒泡排序

1. 簡述    假設待排序數組為 int array[], 數組長度為n。    第1趟在array[0]-array[n-1]範圍內,從後向前依次比較,把較小交換到前面,最終最小的元素會站在array[0]裡面。    第2趟在array[1]-array[n-1]範圍內,··· ,最終第二小的元素會站在array[1]裡面。    ...    第n-1趟,在array[n-2]-array[n-1]範圍內,··· , 最終第n-1小的元素會站在array[n-2]裡面。   

編程之美-3.1-字串移位包含的問題

1. 簡述    給定兩個字串s1和s2,要求判斷s2是否能夠被s1做迴圈移位得到的字串包含。例如,給定s1=AABCD和s2=CDAA,返回true;給定s1=ABCD,s2=ACBD,返回false。2. 思路    將問題轉化為:判斷s1s1中是否包含s2子串。即對於s1=AABCD和s2=CDAA,判斷AABCDAABCD中是否存在AA。    使用KMP匹配就行,對於s1s1也不用特地去開闢空間,假設s1的字串指標為str,長度為len_str,只需len_str +=

字串處理的兩個問題:刪除指定字元,刪除相鄰相同的字元

1.刪除指定字元這是《The C programming language》中的一個例子,寫的很巧妙(比我自己當時想的好多了),原地刪除,沒有多用額外的儲存空間。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->void squeeze(char *s , int c){int i , j;for(i = j = 0 ; s[i] ; i++)

單繼承,多繼承,虛擬繼承,sizeof大小

1. 題目   #include<iostream>using namespace std;class S {};class A:S {virtual void fun() { ; }};class B:A {virtual void fun() { ; }};class C:B {virtual void fun() { ; }};class M {virtual void fun() {}};class N {virtual void fun() {}};

演算法熟記-排序系列-插入排序

1. 簡述    假設待排序數組為 int array[], 數組長度為n。    第1趟,認為array[0]-array[0]已經排序,把array[1]插入到合適的位置。    第2趟,認為array[0]-array[1]已經排序,把array[2]插入到合適的位置。    ···    第n-1趟,認為array[0]-array[n-2]已經排序,把array[n-1]插入到合適的位置。2. 複雜度   

初識,線段樹和樹狀數組

這幾天在網上看了很多關於線段樹和樹狀數組的資料,感覺是很重要的資料結構,有必要邊學邊做下記錄。1.線段樹凡是關於線段樹的資料,我想都有這麼一張圖,的確,它給了人最初的感性認識,其次這幅圖在以後分析問題時也很有協助: 線段樹的基本操作(由於線段樹是一棵完全二叉樹,且每條線段以類似“二分”的方法處理,因此時間複雜為O(logN)):Code highlighting produced by Actipro CodeHighlighter

編程之美-2.2-不要被階乘嚇倒

1. 簡述    1) 給定一個整數N,那麼N的階乘N!末尾有多少個0呢?例如:N=10,N!=3 628 800,N!的末尾有兩個0。    2) 求N!的二進位表示中最低位1的位置。 2.

楊氏矩陣尋找

1. 簡述    楊氏矩陣中,每行元素是遞增的,每列元素也是遞增的。即a[i][j]<a[i+1][j]且a[i][j]<a[i][j+1]。要在這樣的矩陣中尋找某個數值元素的位置,複雜度可以達到O(M+N),其中M為矩陣行長度,N為矩陣列長度。2. 原理    從矩陣的左下角或者矩陣的右上方處開始遞迴運行,以左下角為例,value為要尋找的值,(i,j)為當前矩陣中的位置,初始為(M-1, 0)。    如果超過了矩陣範圍則說明不存在這樣的元素,返回-1,-1。   

總頁數: 61357 1 .... 26474 26475 26476 26477 26478 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.