第一題求兩數和,給定乙個陣列,包含一系列整數。以及乙個求和目標,從陣列序列中找到兩個數使得a+b=target
一般的解法是o(n2)的方法。即兩個for迴圈遍歷查詢。這是暴力解法
public
int twosum(int nums, int target) ;}}
}throw
new illegalargumentexception("no two sum solution");
}
第二種方法是建立乙個hash對映的方法,把陣列中的元素對映到其下標,然後用乙個for迴圈遍歷,尋找target-num[i]在hash table中的對映值,如果對映值與當前下標不相等,則找到了答案。
public
int twosum(int nums, int target)
for (int i = 0; i < nums.length; i++) ;}}
throw
new illegalargumentexception("no two sum solution");
}
本著對第二種方法的執著追求,繼續進一步優化**。把建立hash table的過程與查詢的過程同時進行。我們對當前的數字計算target-num[i],並查詢該結果在hash table 中是否存在來輸出結果。這樣一來只需要乙個for迴圈便可達到目的,而且if判斷也可以被優化了,每次查詢得到的結果必定不會與當前值重複,因為它是在這之前加入容器的.
public
int twosum(int nums, int target) ;
}map.put(nums[i], i);
}throw
new illegalargumentexception("no two sum solution");
}
給兩個鍊錶,每個鍊錶上的節點有一些數字,表示乙個數,然後模擬整數加法
這跟利用字串模擬大整數加法一樣
對應節點做加法,然後判斷進製。最後有一點細節就是,計算完之後,有進製的情況,這時還需要把進製補上.
listnode* addtwonumbers(listnode* l1, listnode* l2)
else
carry = false;
ans.push_back(val);
if(l1)
l1 = l1->next;
if(l2)
l2 = l2->next;
}listnode* res = new listnode(ans[0]);
listnode* now = res;
for (int i = 1; i < ans.size(); i++)
return res;
}
給乙個字串,包含大寫字母和小寫字母,從中找出乙個子串,其中不包含重複的字母。
這道題的暴力解法,對於任意區間[i,j],遍歷區間[i,j]檢視是否有重複的字元,如果沒有重複的字元,則是乙個合法的子串,接著取ans與當前子串長度之間的最大值。
public
class solution
public boolean allunique(string s, int start, int end)
return
true;
}}
時間複雜度o(n3)
第二種方法是遍歷整個字串,利用乙個集合來儲存字母。
具體方法是這樣的:區間[i,j]保證是不重複的子串,每一層迴圈中,檢視集合中是否存在str[j],如果不存在就將該字元加入集合中,更新ans,然後將j遞增.如果存在集合內就將str[i]從集合內刪除,同時遞增i。
通過不斷地將區間向右擴張和區間向左收縮,達到區間移動的目的,從而找到無重複字元的子串
public
class solution
else
}return ans;
}}
時間複雜度o(2n)=o(n)
第三種方法是基於第二種方法的優化,只需要乙個乙個陣列標記即可,該陣列記錄的是某個字元重複出現時,區間向左收縮時,左邊界目標位置的最小下標
所謂字元重複出現時,區間向左收縮時,左邊界目標位置的最小下標,在遍歷字串的過程中,肯定在某個時刻記錄了這個值,才能在隨後遇到的時候使用。
具體的實現如下
class
solution
return ans;
}};
時間複雜度o(n)
date:2017.2.16
leetcode algorithm problem
快速切題 usaco ariprog
題目 給定3 n 25,m 250,求m及以內的兩兩平方和能否構成為n的等差數列 1 wa 沒有注意到應該按照公差 首項的順序排序 2 mle 嘗試使用桶,但是實際上那可能是分散的,也即首項不一樣 3 tle 統計過多了,總之姿勢不好 4 wa 當d 250 250 2時越界導致一直輸出,實際上因為...
寒江雪 UML概述
可靠的設計需要一種被系統分析員,開發人員和客戶接受為標準的設計表示法,就像電子工程師在電路圖中所用的標準表示法以及在物理學中被作為標準的費因曼圖所用的表示法那樣。uml就是這樣的表示法 uml包括了一些可以相互組合為圖表的圖形元素。uml提供這些圖的目的是用多個檢視來展示乙個系統,這組檢視被稱為乙個...
寒江雪 軟體測試方法
靜態分析是不需要執行程式而進行測試的技術,其主要功能是檢查軟體與其描述是否一致,是否有衝突或歧義性。靜態分析的主要特徵是利用計算機作為工具來分析源程式,而不是執行程式。它檢查的是軟體系統在描述,表示和規格上的錯誤。是其他測試的前提.檢查 包括 走查和 審查。走查除了閱讀程式外,還需要由測試員利用人工...