原创 子數組的最大乘積

     給定一個長度爲N的整數數組,只允許用乘法,不能用除法,計算任意(N-1)個數的組合乘積中最大的一組,並寫出算法的時間複雜度。(注意,因爲數組中數可正可負,通過排序去除最小的顯然不能滿足要求,如乘積爲負,你去除最小的負值顯然不對,

原创 快速尋找滿足條件的兩個數

能否快速找出一個數組中的兩個數字,讓這兩個數字之和等於一個給定的數字?      解法一:窮舉,從數組中任取兩個數字,計算兩者之和是否爲給定的數字。時間複雜度爲(n*(n-1)=O(n2))。      解法二:對數組中每個數a,都判斷s

原创 自控力之累到無力抵抗:爲什麼自控力和肌肉一樣有極限?

如果你覺得自己沒有時間和精力去處理“我想要”做的事,那就把它安排在你意志力最強的時候做(一般自控力從早上到晚上會逐漸減弱,可以嘗試發現自己在什麼時候意志力最強)。          血糖降低會使得意志力降低。最好的方法是保證你的身體有足夠

原创 最大公約數問題

解法一:歐幾里得的輾轉相除法。f(x,y)=f(y,x%y),f(a,b)表示a,b最大公約數。 int gcd(int x,int y){      return (!y)?x:gcd(y,x%y); } 解法二:對於大數而言,取模運算

原创 斐波那契數列

     對於數列a[n],遞推公式爲a[n+1]=pa[n]+qa[n-1],其特徵方程爲x^2=px+q (一個數列:X(n+2)=C1X(n+1)+C2X(n);設r,s使X(n+2)-rX(n+1)=s[X(n+1)-rXn];所

原创 第7章 方法

38、檢查參數的有效性        非公有方法應該使用斷言(assertion)來檢查它們的參數。如在方法裏assert a!=null;        但並不是說對參數的任何限制都是好事。有效性檢查工作非常昂貴,而且有的有效性檢查已經

原创 java程序員面試寶典(3)

1.      Runnable接口與Thread類的區別之一:實現Runnable接口的線程類的多個線程,可以方便地訪問同一變量,而Thread類則需要內部類進行替代。 2.      線程池最重要的特徵也就是最大程度利用線程,其次ja

原创 第3章 標準庫類型

3.1、命名空間的using聲明     在頭文件中必須總是使用完全限定的標準庫名字(即如std:cin)。因爲如果在頭文件中放置using聲明,就相當於在包含該頭文件的每個程序中都放置了同一using聲明,不論該程序是否需要using聲

原创 子數組之和的最大值(二維)

    二維情況下,定義“部分和”PS[i][j]等於以(1,1),(i,1),(1,j),(i,j)爲頂點的矩形區域的元素之和。則以(i_min,j_min),(i_min,j_max),(i_max,j_min),(i_max,j_m

原创 尋找數組中的最大值和最小值

我能想到的是:掃描一遍,用max和min存儲掃描過程中的最大值和最小值,數組中兩個數據比較後,拿大的跟max比較,拿小的跟min比較,總的時間複雜度是1.5N。 另一種方法可以用分治的思想:在N個數中求最小值min和最大值max,我們只需

原创 第4章 數組和指針

4.1、數組     數組是由類型名、標識符和維數組成的複雜數據類型。 4.1.1、數組的定義和初始化     數組的維數必須用大於等於1的常量表達式定義。該表達式只能包含整型字面值常量、枚舉常量或者用常量表達式初始化的整型const對象

原创 第8章 通用程序設計

45、將局部變量的作用域最小化        要使局部變量的作用域最小化,最有力的方法就是在第一次使用它的地方聲明。(因爲較早的程序設計語言(如C語言)要求局部變量必須在一個代碼塊的開頭處進行聲明,導致現在習慣性這麼做···。java允許

原创 尋找最近點對

一維的數很簡單,先排序,再掃描已排好的數,相鄰兩個進行比較即可,時間複雜度爲O(N*log2N+N)= O(N*log2N)。 兩維的話:把平面上N個點分成兩部分left和right。假設分別求出left和right兩部分最短距離mind

原创 第6章 語句

6.1、簡單語句        使用空語句應該加上註釋。 6.5、if語句        多個if語句,但後面跟的else比if少,導致匹配存在歧義,這就是懸垂else(dangling-else)問題。 6.6、switch語句    

原创 精確表達浮點數

用分數形式表示小數。有限小數或者無限小數都可以轉化爲分數。方法:對於有限小數X=0.a1a2a3···an,X=(a1a2a3···an)/10^n。對於無限循環小數X=0.a1a2a3···an(b1b2···bm),X=( a1a2