從上面的文字中的意思來看,簡單的話 入棧序列是升序排列。那麼出棧序列可以這麼說 假設當前元素為4 那麼其後的小於4的元素都必須降序排列,否則出錯。海濤這裡的題並沒有指明 所以需要另外一種方法來處理。首先判斷 棧頂元素是否和輸入的元素相等 不等則入棧,等則出棧如果所有元素入棧還未找到 要輸出的元素那麼則輸出錯誤。
還好看到了,這個以前好早見到過。用得是輾轉相除法。k =x/y b=x%y 則 x = ky+b如果一個整數能夠同時整除x和y,則必能同時整除b和y;而能夠同時整除b和y的數也必能同時整除x和y即 x,y和b和y的公約數相同因此代碼很簡潔int gcd(int x,int y){ return (!y)?x:gcd(y,x%y);}編程之美第二種思路做了一定的擴充x,y 的公約數和x-y,y的公約數相同int gcd(int x,int y){ if(x<y)
簡單思路一:從1開始遞增,直到遇到第1500個醜數。不知道要遍曆多少。思路二: 利用醜數的性質,用空間換時間,排在後面的醜數,必然在排在前面的醜數 *2,*3,*5中的某個咯。ok,開始code.#include "stdio.h"int isUgly(int num){int ret =0;while(num%2==0){num/=2;}while(num%3==0){num/=3;}while(num%5==0){num/=3;}if(num == 1)ret =1;return ret;}
這個不就是約瑟夫環的問題麼,迴圈鏈表一般可以解這種題。之前網上還看到過數學解法,直接就計算出來的。這道題考試幾率很大,可以跑跑~#include "stdio.h"typedef struct Node{int data;struct Node *next;}Lnode;int main(){ Lnode *p,*q,*head;int n=0;int i=0;int m=0;int count;scanf("%d",&n);p=(Lnode
這是海濤書上面的一道題目感覺很有意思。思路呢就是 根據數組的特性吧,因為右上方為行最大,列最小,那麼和我們相比較的元素相比,不管如何如果大 則減列,如果小則減行。這樣不斷縮小我們查詢的範圍,可謂是經典中的經典啊。書中採用右上方那麼我也來小試牛刀#include "stdio.h"int findRightBound(int **data,int rows,int cols,int key){int row;int col;if(rows==0||cols==0){return -1;}row =
該題第一眼看到 就是從頭到尾一個一個的比,然後找逆序對。方法簡單,可惜不行。思考:我開始分析的思路是 歸併吧。可是 我想到了 把7.5.6,4分成7,5,和6,4這兩個數組求逆序對,至於合并這兩個含2個元素的數組就找不到好的解決方案。看了書才明白,需要將合并後的子數組排序,然後分別在兩個排序了的子數組中,進行尋找,從最後一個最大元素開始,當前半部分最大的元素 大於後半部的,那麼逆序對,加上後半部的元素總數,儲存前半部元素,移動指標。當前半部的最大元素 小於後半部的,那麼逆序對
平衡二叉樹 有四種使其變為平衡的方法。分別如何LL型單向右旋平衡處理:由於A的左子樹根結點的左子樹插入了一個節點,A的平衡因子由1增為2,是A為根的子樹失去平衡,需進行一次向右的順時針旋轉操作。RR 型單向左旋平衡處理:由於A的右子樹根結點的右子樹上插入節點,A的平衡因此由-1變為-2,使A失去平衡。進行一次向左的逆時針旋轉LR型由於A的左子樹的根的右子樹插入節點
拿到這道題目 我首先想到 什麼算一條路徑。題目中說 從根結點到分葉節點 形成一條路徑。那麼這樣就簡單一些了吧,深度優先遍曆樹吧,當然這個時候要用到棧來處理。#include "iostream"#include "vector"using namespace std;typedef struct Node{int data;struct Node *left;struct Node *right;}Lnode;void buildTree(Lnode **head){int
這道題一接觸感覺有點陌生了,但是鏡像 怎麼表示的呢 1 1 / \ 鏡像 / \ 2 3 ------------------
觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。interface Subject{void Attack(Observer observer);void Detack(Observer observer);void Notify();string SubjectStack;get();set();}class Secratry implement Subject{private List&
這道題目感覺有點複雜,至少我比較討厭這種題目 邊界條件考慮的過於多了。海濤的思路是 猜測確定邊界吧 應為5*5矩陣最裡面點為2,2 6*6矩陣最裡面的點為2*2得出的節點時rows>start*2 &&cols>start *2那麼就滿足進行列印的條件就可以輸出。反正代碼不好寫,我還是感覺的謝謝吧。#include "stdio.h"void printMatrix(int **data,int cols,int rows,int start){int
選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,冒泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。冒泡法: 這是最原始,也是眾所周知的最慢的演算法了。他的名字的由來因為它的工作看來象是冒泡:
編程之美的演算法思想很好,可是有些地方很難一下子看明白,對於我這種急性子的人,很難一下搞懂。通俗的將這道題的思路是這樣子的加入烙餅序列 為 1 7 3 5 6 2 4我們認為 4 為餅子的頂端,由於只能把下面的多塊餅移到上面,然後再反轉移到響應的位置。實際上 就是從 底層開始 我們找未放在原位的餅子 ,現在在的位置,將其移到上面,然後在移到響應的位置。簡單地說 就是把大的放到底下,小的放到上面。這樣就容易。直接code#include "iostream"#include
有題目可以很容易的看出。單鏈表 公用節點。必然最後一個節點相同,兩個鏈表成Y字形感覺的話,需要從後往前找,那麼只有棧具有這個後進先出的性質。那麼c++的stl庫當然成為了首先選擇的結構了,為了節省時間吧,用c實現一個花費的時間太多了。代碼如下#include "iostream"#include "stack"using namespace std;typedef struct Node{int data;struct Node *next;}Lnode;int main(){int num=1
產品思路和產品策略的分享 一直很想寫點產品策略的東西和大家分享,想說說一個能控制一個產品命運的產品經理,應該如何去做產品策略和版本規劃,如何為一個產品找到市場定位,然後將一個遠大的目標如何分解為每天可以執行的工作去實現它。一個產品經理應該如何在瞬息變化、交錯橫流的行業中堅定不移的奔著自己的目標去,如何能衡量這個目標的正確與否。一個產品經理在項目內如果增強個人影響力,如何控制項目的進度和爭取更多的話語權和決定權。…… 其實,做一個好產品難,做一個好的產品經理更難。你會發現,很多時候,
思路呢 就是利用後序遍曆的性質吧1 數組最後一個元素為根項目,左邊都為 左子樹和右子樹節點。2 根據數組的根結點以及搜尋二叉樹的性質,左邊小 右邊大 ,那麼遍曆左邊的數組元素 找到第一個大於該元素的節點為右子樹的節點3 此時可以用遞迴解決問題咯比如上題的過程如下 {5,7,6,9,11,10,8}根節點 8遍曆 找到 9 為右子樹的第一個節點那麼 可以 5 7 6為左子樹 6 為左子樹根結點 9 10 11 為右子樹
這道題之前看到過一個比較簡單的作法就是講數字分為當前位,低位,高位比如75125從低位向高位開始5 ---------low =0 curren =5 high =7512則1的個數為 (high+1)*當前加權 +low-1具體規則 就是從低位到高位 加權 1 10 100 。。number 等於 1 ,則為 高位*當前加權+low-1number 大於 1 ,則為 (高位+1)*當前加權+low-1number 等於0 ,則為 高位*當前加權
該題我第一感覺 就是用空間換時間然後海濤的思路就是用兩個指標 先計算所需空間 然後從後往前拷貝,這樣可以達到O(n)#include "stdio.h"#include "string.h"int main(){char str[1024] = "my hobby is hello";int len = strlen(str);char temp[1024];char rep[]="%20";char *p1,*p2;char ch;int count =0;int i=0;int total;
大話設計模式裡面通過姚明到籃球需要翻譯來瞭解戰術,而引出了適配器模式。適配器模式 將一個類的介面 轉換成 客戶希望的另外一個介面。Adapter模式 使得原本由於介面不相容 而不能一起工作的那些類可以一起工作。在軟體開發中,也就是 系統的資料和行為都正確,但介面不符時,我們應該考慮用適配器,目的是使控制範圍之外的一個原有對象與某個介面匹配。 適配器模式主要應用於希望複用一些現存的類,但是介面又與複用環境要求不一致的情況。class Target{ public void Request(
這道題目 海濤書上寫的很經典,要是直接讓我來做。我的思路 就是也用一個輔助棧 當進入元素小於當前輔助棧最小元素時那麼將其壓入棧,同時記錄每一個最小值壓入棧的時候,棧內元素的數目比如壓棧序列為 5 7 3 8 2 1那麼輔助棧形式為 5(1)3(1)2(1)1(1) 因此我使用的是一個輔助棧 加一個輔助變數 ,因此當pop原來棧的時候 ,我進行輔助棧變數減1 5(2)3(2)若為0 則出棧。看了海濤的思路