演算法訓練第一周

2021-10-09 17:42:44 字數 3463 閱讀 7372

** leetcode-283(移動零)**

基礎寫法:

class

solution

//設定指標i j

//遍歷nums[i] 當nums[i]!=0 即當值不為0時 nums[j]=nums[i];j++;

int j =0;

for(

int i=

0;i++i)

}//可以使i j指標同時向右移 只有當nums[i]!=0 j才移動 造成j指標是慢的一方 所有0遍歷完後 陣列中》j&&for

(int i=j;i

++i)

}}

優化

class

solution

//優化之處在於只進行一次迴圈,邊迴圈的同時移動i j指標 當數非0時賦給nums[j]

int j =0;

for(

int i =

0; i < nums.length; i ++

) j ++;}}}}

精簡

public

void

movezeroes

(int

nums)

while

(insertpos < nums.length)

}

leetcode-11(盛最多水的容器)

class

solution

else

}return ans;

}}

leetcode-70(爬樓梯)

class

solution

int[

] a=

newint

[n+1];

a[0]

=0; a[1]

=1; a[2]

=2;for

(int i=

3;i<=n;i++

)return a[n];}

}

leetcode-1(兩數之和)

class

solution;}

map.

put(nums[i]

,i);

}throw

newillegalargumentexception

("no two sum solution");

}}

leetcode-15(三數之和)

leetcode-66(加一)

class

solution

//特殊情況 例如當digits=9999

//則需要手動再擴大陣列 將digits[0]=1

digits=

newint

[digits.length+1]

; digits[0]

=1;return digits;

}}

leetcode-24(兩兩交換鍊錶中的結點)

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

//建立兩個中間結點

listnode first=head;

listnode second=head.next;

//交換過後first.next=second.next

first.next=

(second.next)

;//而second.next指向first

旋轉陣列

class

solution

public

void

reserve

(int

nums,

int start,

int end)

}}

合併兩個有序鍊錶

//遞迴

class

solution

else

if(l2==null)

else

if(l1.val

else}}

//迭代

class

solution

else

prev=prev.next;

//沒獲取一次 移動一次

} prev.next=l1==null? l2:l1;

return prehead.next;

}}

合併兩個有序陣列

class

solution

else}}

}

//1.按列求

class

solution

}int max_right =0;

//找出右邊最高

for(

int j = i +

1; j < height.length; j++)}

//找出兩端較小的

int min = math.

min(max_left, max_right)

;//只有較小的一段大於當前列的高度才會有水,其他情況不會有水

if(min > height[i])}

return sum;}}

//2.雙指標

class

solution

else

++left;

}else

else

--right;}}

return ans;

}}

(此文章為自己學習記錄 沒有詳細的思路講解)

演算法,第一周

題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1...

第一周訓練 E題

函式 f z zf z z 已知 f 1 f 2 f 1 f 2 的值,且對於任意 x 1x 1 有 f x 1 f x f x 1 sin x 2 f x 1 f x f x 1 sin x2 求 f n f n 的值。多組資料。資料組數 t 100 t 100 每組資料報含 3 3 個不超過 1...

pku 第一周訓練 模擬

給你一系列的左右括號的兩個表示方法,p和w.然後是有p向w轉換 pi表示第i個右括號前邊有幾個左括號 wi表示第i個右括號如果要找匹配的話,要找從後往前數幾個左括號與它匹配。include include include define maxn 25 using namespace std int ...