原创 NEFU OJ5 An interesting problem

題目:                  有n位數d1d2d3...dn,如果將最後一位數dn移到首位,即dnd1d2d3...d(n-1),且 dnd1d2d3...d(n-1) = dn*d1d2d3...dn,則稱這個數滿足條件。

原创 將二叉搜索樹轉換爲雙向鏈表(不創建新的結點)&&數組中出現超過一半的數字

轉換的雙向鏈表是從小到大順序的,而二叉搜索樹如果按照中序遍歷則肯定是這個序列,所以要在中序遍歷的過程中建立雙向鏈表。 而因爲結點的左右指針都要在遍歷中用到,所以創建一個新的遍歷plast來記載已經找到的雙向鏈表的最後一個結點,然後將其它結

原创 NEFU OJ3 K-Matrix

很經典的一道問題,必須求出每個子矩陣的解。 有些類似動態規劃的思想,a[i][j]表示o-i行,0-j列元素的值,通過它求出每個子矩陣的值。#include<iostream> #include<stdio.h> using namesp

原创 判斷樹B是否爲樹A的子樹&&求出樹的鏡像

判斷樹B是否爲樹A的子樹。 思路很簡單,以B的根節點爲標準,查找A中節點是否有相同的。如果有相同的,再判斷兩個子樹是否相同。 如果不同,則繼續查找。 #include<iostream> #include<string> #include

原创 根據樹的後序判斷是不是二叉搜索樹&&二叉樹中和爲某一值的路徑

根據樹的後序判斷是不是二叉搜索樹。 關鍵樹的後序序列規律是根是最後的,而右子樹都大於根,左子樹都小於根。可以判斷序列是否滿足這個條件,然後遞歸判斷左右子樹即可。 #include<iostream> #include<string> u

原创 從1到n的數中1出現的個數&&尋找醜數

從1到n的數中1出現的個數,最簡單的思路就是從1到n求每個數字中1的個數,這樣就是速度太慢了。 可以尋找規律,假設數爲abcde,c在百位上,求百位上的數字的方法:如果c等於0或者大於1,1的個數只與左邊有關(即ab),如果c等於1,1的

原创 union和struct的內存分配&&判斷正方形&&函數的隱式轉換

最近面試,關於內存分配的題居然答錯了,複習下。 一、union內存分配 在union中所有的成員公用一塊內存,同一時間只能存儲一個成員的值。那麼其內存分配的規律是啥,看下面兩個例子。         union test1{      

原创 NEFU OJ21最長上升子序列

仍然用dp,因爲最長上升字序列是最優問題,而且保證最優解由最優子解構成數組爲a[n],解爲dp[n]dp[i]表示以a[i]結尾的最長上升子序列長度i的範圍:[0-j),如果a[j] > a[i],則存在上升子序列dp[i] +1,求最長則

原创 n個骰子,求所有可能和出現的概率&&約瑟夫環

有兩種解法: 一、遞歸求出所有的可能性,然後計算概率。 二、遞歸過程需要重複計算,所以可以用數組來存儲結果提升速度。 下面代碼有兩種方式並可以看出時間的差異。 #include<iostream> #include<string.h>

原创 順時針輸出矩陣

比如矩陣是: 1    2     3    4 5    6     7    8 9    10  11  12 13  14  15  16 則輸出順序爲 1 2  3  4 8 12 16 15 14 13 9 5 6 7 11

原创 找數組中第k大的數

其實按照上一篇文章的思路,可以根據快排來計算第k大的數。 但會修改數組中的數據,所以這裏有新的不修改數據的思路: 1、用multiset實現自動排序,大小爲k,每個數與set中最大的數比較,如果小於則替換。 2、可以用最大堆來實現,方法類

原创 連續子數組的最大和

很常見的面試題目了,有兩種方法: 一、觀察規律,因爲是尋找連續最大和,需要遍歷整個數組,用一個變量來記錄所有連續和中最大的,用另一個變量來記錄遍歷過程中最大的。如果遍歷過程中最大的變爲0了,則說明後面的元素要重新計算最大值了。因爲和之前統

原创 不用if 、for等判斷語句和乘除法求1+2..+n的值 &&不用加減乘除求兩個數的和

有兩種方法:構造函數在構造時進行累加, 或者通過函數指針,一個函數用來結束調用,另一個函數用來計算累加。代碼如下: #include<iostream> using namespace std; class Temp{ public:

原创 NEFU OJ8 二倍的問題

排序後尋找符合條件的 通過代碼如下: #include<iostream> #include<stdio.h> #include<stdlib.h> #include<algorithm> using namespace std; int

原创 NEFU OJ 2 猜想

關鍵點: 合數:可以分解成任意質數的乘積 求出質數表,然後處理輸入 #include<iostream> #include<stdio.h> using namespace std; #define SIZE (1<<24) int s