//演算法總結
/***leetcode題目35:搜尋插入位置
*給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
*示例 1:
*輸入: [1,3,5,6], 5
*輸出: 2
**示例 2:
*輸入: [1,3,5,6], 2
*輸出: 1
*///解法一:暴力法 | 時間複雜度:o(n) 空間複雜度:o(1)
public
intsearchinsert
(int
nums,
int target)
}// 目標值在陣列所有元素之後的情況
// 如果target是最大的,或者 nums為空,則返回nums的長度
return nums.length;
}//解法二:二分法*/ | 時間複雜度:o(logn) 空間複雜度:o(1)
public
intsearchinsert
(int
nums,
int target)
else
if(nums[middle]
< target)
else
}// 分別處理如下四種情況
// 目標值在陣列所有元素之前 [0, -1]
// 目標值等於陣列中某乙個元素 return middle;
// 目標值插入陣列中的位置 [left, right],return right + 1
// 目標值在陣列所有元素之後的情況 [left, right], return right + 1
*leetcode209.長度最小的子陣列
*給定乙個含有 n 個正整數的陣列和乙個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的 連續 子陣列,並返回其長度。如果不存在符合條件的子陣列,返回 0。
*示例:
*輸入:s = 7, nums = [2,3,1,2,4,3]
*輸出:2
*解釋:子陣列 [4,3] 是該條件下的長度最小的子陣列。
*///解法一:暴力解法 時間複雜度:o(n^2) | 空間複雜度:o(1)
public
intminsubarraylen
(int s,
int[
] nums)}}
// 如果result沒有被賦值的話,就返回0,說明沒有符合條件的子串行
return result == max_value ?
0: result;
}//解法二:滑動視窗:不斷的調節子串行的起始位置和終止位置,從而得出我們要想的結果 時間複雜度:o(n) | 空間複雜度:o(1)
public
intminsubarraylen
(int s,
int[
] nums)
}// 如果result沒有被賦值的話,就返回0,說明沒有符合條件的子串行
return result == max_value ?
0: result;
}
/**
*leetcode27. 移除元素
給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須僅使用 o(1) 額外空間並「原地」修改輸入陣列。
元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。
示例 1:
給定 nums = [3,2,2,3], val = 3,
函式應該返回新的長度 2, 並且 nums 中的前兩個元素均為 2。
你不需要考慮陣列中超出新長度後面的元素。
*///解法一:暴力解法 | 時間複雜度:o(n^2)
public
intremoveelement
(int
nums,
int val)
i--;// 因為下表i以後的數值都向前移動了一位,所以i也向前移動一位,新的數值佔據了原來i的位置,所以需要重新判斷是否等於target,不然就會跳過該值可能導致錯誤
size--
;// 此時陣列的大小-1}}
return size;
}
//解法二:雙指標(快慢指標法):「通過乙個快指標和慢指標在乙個for迴圈下完成兩個for迴圈的工作。」 | 時間複雜度為o(n)
*leetcode59.螺旋矩陣ii
*給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。
*示例:
*輸入: 3 輸出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
*/public
int[
]generatematrix
(int n)
// 模擬填充右列從上到下(左閉右開)
for(i = startx; i < startx + n - offset; i++
)// 模擬填充下行從右到左(左閉右開)
for(
; j > starty; j--
)// 模擬填充左列從下到上(左閉右開)
for(
; i > startx; i--
)// 第二圈開始的時候,起始位置要各自加1, 例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)
startx++
; starty++
;// offset 控制每一圈裡每一條邊遍歷的長度
offset +=2;
}// 如果n為奇數的話,需要單獨給矩陣最中間的位置賦值if(
(n %2)
==1)return res;
}
LeetCode刷題 演算法篇
暴力解法 class solution def twosum self,nums list int target int list int i 0 while i j i 1 while j if nums i nums j target return i,j j 1i 1 return none ...
leetcode 刷題筆記(簡單題)陣列篇
初始化陣列 int a int b new int arrays.tostring b 輸出陣列 int c new int 3 指定陣列長度 新建 arraylist 物件 arraylistarr new arraylist arr.add 1 新增元素 o 1 arr.add 3,99 向下標...
演算法刷題小總結
1.有問題 class solution if i 0 reverse nums.begin nums.end else swap nums k nums i sort nums.begin k 1 nums.end 問題 這種while 裡面加了個if else判斷的話,如果處於邊界時,else ...