C++實現(xiàn)LeetCode數(shù)組練習(xí)題_第1頁
C++實現(xiàn)LeetCode數(shù)組練習(xí)題_第2頁
C++實現(xiàn)LeetCode數(shù)組練習(xí)題_第3頁
C++實現(xiàn)LeetCode數(shù)組練習(xí)題_第4頁
C++實現(xiàn)LeetCode數(shù)組練習(xí)題_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第C++實現(xiàn)LeetCode數(shù)組練習(xí)題目錄1、存在重復(fù)元素2、最大子序和3、兩數(shù)之和4、合并兩個有序數(shù)組5、兩個數(shù)組的交集II6、買賣股票的最佳時機7、楊輝三角8、重塑矩陣9、有效的數(shù)獨10、矩陣置零總結(jié)

1、存在重復(fù)元素

排序數(shù)組,之后遍歷是否有重復(fù)的元素

publicbooleancontainsDuplicate(int[]nums){

Arrays.sort(nums);

for(inti=1;inums.length;i++){

if(nums[i-1]==nums[i]){

returntrue;

returnfalse;

不排序,利用set去重,判斷長度

publicbooleancontainsDuplicate(int[]nums){

HashSetIntegerset=newHashSet();

for(inti=0;inums.length;i++){

set.add(nums[i]);

if(set.size()==nums.length){

returnfalse;

returntrue;

2、最大子序和

這道題最經(jīng)典的思路就是動態(tài)規(guī)劃,取當(dāng)前數(shù)組值和當(dāng)前數(shù)組值加上前一個數(shù)組值中取最大值

publicintmaxSubArray(int[]nums){

intres=nums[0];

for(inti=1;inums.length;i++){

nums[i]=Math.max(nums[i]+nums[i-1],nums[i]);

res=Math.max(nums[i],res);

returnres;

還有一種就是記錄前i項子序列和小于0就重新賦值為下一個

publicintmaxSubArray(int[]nums){

intcount=nums[0];

intres=nums[0];

for(inti=1;inums.length;i++){

if(count=0){

count=nums[i];

}else{

count+=nums[i];

res=Math.max(res,count);

returnres;

3、兩數(shù)之和

利用map,來存儲數(shù)組值和當(dāng)前位置,來判斷

publicint[]twoSum(int[]nums,inttarget){

HashMapInteger,Integermap=newHashMap();

for(inti=0;inums.length;i++){

map.put(nums[i],i);

for(inti=0;inums.length;i++){

intnum=target-nums[i];

if(map.containsKey(num)i!=map.get(num)){

returnnewint[]{i,map.get(num)};

returnnull;

4、合并兩個有序數(shù)組

定義變量,遍歷比較

publicvoidmerge(int[]nums1,intm,int[]nums2,intn){

inti=m-1;

intj=n-1;

intk=m+n-1;

while(i=0j=0){

if(nums1[i]nums2[j]){

nums1[k--]=nums1[i--];

}else{

nums1[k--]=nums2[j--];

while(j=0){//即nums2元素還沒放完

nums1[k--]=nums2[j--];

5、兩個數(shù)組的交集II

1.排序,定義指針來判斷

publicint[]intersect(int[]nums1,int[]nums2){

Arrays.sort(nums1);

Arrays.sort(nums2);

intleft=0;

intright=0;

ListIntegerlist=newArrayList();

while(leftnums1.lengthrightnums2.length){

if(nums1[left]==nums2[right]){

list.add(nums1[left]);

left++;

right++;

}elseif(nums1[left]nums2[right]){

left++;

}else{

right++;

int[]arr=newint[list.size()];

for(inti=0;ilist.size();i++){

arr[i]=list.get(i);

returnarr;

6、買賣股票的最佳時機

股票問題就是保存數(shù)組中最小值,之后用當(dāng)前數(shù)組值減去最小值保留最大的,如果max是負(fù)數(shù),就返回0

publicintmaxProfit(int[]prices){

intmax=Integer.MIN_VALUE;

intmin=prices[0];

for(inti=1;iprices.length;i++){

max=Math.max(max,prices[i]-min);

min=Math.min(prices[i],min);

if(max0){

return0;

returnmax;

7、楊輝三角

判斷特殊情況,第一列和i=j列都是1,其他的都上面的值加上面左邊的值,定義二維數(shù)組進行幫助

publicListListIntegergenerate(intnumRows){

ListListIntegerlist=newArrayList();

int[][]array=newint[numRows][numRows];

for(inti=0;inumRows;i++){

ListIntegerres=newArrayList();

for(intj=0;jj++){

if(j==0||i==j){

array[i][j]=1;

}else{

array[i][j]=array[i-1][j-1]+array[i-1][j];

res.add(array[i][j]);

list.add(res);

returnlist;

8、重塑矩陣

找到其規(guī)律進行賦值即可

publicint[][]matrixReshape(int[][]mat,intr,intc){

intn=mat.length;//行數(shù)

intm=mat[0].length;//列數(shù)

if(m*n!=r*c){

returnmat;

int[][]arr=newint[r][c];

for(inti=0;ii++){

arr[i/c][i%c]=mat[i/m][i%m];

returnarr;

9、有效的數(shù)獨

定義二維數(shù)組來判斷,將存在的數(shù)字置為true,判斷是否該位置為true,返回false.

publicbooleanisValidSudoku(char[][]board){

boolean[][]row=newboolean[9][9];//行數(shù)

boolean[][]col=newboolean[9][9];//列數(shù)

boolean[][]box=newboolean[9][9];//格子內(nèi)

for(inti=0;ii++){

for(intj=0;jj++){

charch=board[i][j];

if(ch=='.')continue;

intcurIndex=ch-'1';//計算在哪個位置

intboxIndex=i/3*3+j/3;//計算在哪個格子里面

if(row[i][curIndex]||col[j][curIndex]||box[boxIndex][curIndex])returnfalse;

row[i][curIndex]=true;

col[j][curIndex]=true;

box[boxIndex][curIndex]=true;

returntrue;

10、矩陣置零

先檢查第一行和第一列是否有0,定義boolean變量標(biāo)記

再利用第一行和第一列作為標(biāo)記列,遍歷整個數(shù)組,將中間元素為0的第一行和第一列置為0,

之后遍歷整個數(shù)組將第一行和第一列的為0的元素的中間元素置為0,之后判斷第一行和第一列是否含0,改為0即可

classSolution{

publicvoidsetZeroes(int[][]matrix){

booleanrow=false;//標(biāo)記第一行

booleancol=false;//標(biāo)記第一列

intm=matrix.length;//行數(shù)

intn=matrix[0].length;//列數(shù)

//檢查第一行是否有0標(biāo)記

for(inti=0;ii++){

if(matrix[0][i]==0){

row=true;

break;

//檢查第一列是否有0標(biāo)記

for(inti=0;ii++){

if(matrix[i][0]==0){

col=true;

break;

//遍歷中間元素把第一行和第一列置為0

for(inti=1;ii++){

for(intj=1;jj++){

if(matrix[i][j]==0){

matrix[i][0]=0;

matrix[0][j]=0;

//根據(jù)第一行第一列的結(jié)果把中間元素置為0

for(inti=1;ii++){

for(intj=1;jj++){

if(matrix[i][0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論