陣列簡介
1. LeetCode 1991 找到陣列的中間位置
方法1:字首和
class Solution {
public int findMiddleIndex(int[] nums) {
int tol = 0, s = 0;
for(int num : nums)
tol += num;
for(int i = 0; i < nums.length; i++) {
if(s == tol - s - nums[i])
return i;
s += nums[i];
}
return -1;
}
}
2. LeetCode 35 搜尋插入位置
方法1:二分查詢
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0, right = nums.length;
while(left < right) {
int mid = (left + right) >> 1;
if(nums[mid] < target)
left = mid + 1;
else
right = mid;
}
return left;
}
}
3. LeetCode 56 合併區間
方法1:貪心
- 排序 (a, b) -> a[0] - b[0]
- 列表轉陣列 toArray(new int[M][N])
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int []> ans = new ArrayList<int []>();
for(int[] info : intervals) {
int n = ans.size(), left = info[0], right = info[1];
// 陣列為空 或 區間不能合併
if(n == 0 || ans.get(n - 1)[1] < left)
ans.add(info);
else // 進行合併區間
ans.get(n - 1)[1] = Math.max(ans.get(n - 1)[1], right);
}
return ans.toArray(new int[ans.size()][2]);
}
}
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort(key=lambda x: x[0])
ans = list()
for (left, right) in intervals:
# 列表為空 或 區間不能合併
if not ans or ans[-1][1] < left:
ans.append([left, right])
else: # 區間可以合併
ans[-1][1] = max(ans[-1][1], right)
return ans
二維陣列簡介
字串簡介
雙指標技巧