力扣第239题:滑动窗口最大值
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
int n = nums.length;
int[] array = new int[n -k +1];
Deque<Integer> deque = new LinkedList<>();
//先去在0-k区间去找第一个
for (int i = 0;i<k;i++){
while(!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]){
deque.removeLast();
}
deque.offerLast(i);
}
array[0] = nums[deque.peekFirst()];
//从K开始
for(int i = k; i< n;i++){
while(!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]){
deque.removeLast();
}
deque.offerLast(i);
//向前推左区间
while(deque.peekFirst() <= i - k){
deque.removeFirst();
}
//不断向前的吗??
array[i - k +1] = nums[deque.peekFirst()];
}
return array;
}
}
力扣第28题:除自身以外数组的乘积
238. 除自身以外数组的乘积 - 力扣(LeetCode)
class Solution {
public int[] productExceptSelf(int[] nums) {
// 1 1 2 6
// 24 12 4 1
// 24 12 8 6
int n = nums.length;
int[] left = new int[n];
left[0] = 1;
int[] right = new int[n];
right[n-1] = 1;
int[] la = new int[n];
for (int i = 0;i<n -1 ;i++){
left[i+1] = nums[i] * left[i];
}
for (int i = n-1;i>0;i--){
right[i - 1] =nums[i] * right[i];
}
for (int i =0;i<n;i++){
la[i] = left[i] * right[i];
}
return la;
}
}
力扣第41题:缺失的第一个正数
class Solution {
public int firstMissingPositive(int[] nums) {
int n = nums.length;
for (int i= 0;i<n;i++){
if(nums[i] <= 0){
nums[i] = n+1;
}
}
//标记
for (int i =0;i<n;i++){
int num = Math.abs(nums[i]);
if (num <= n){
nums[num - 1] = -Math.abs(nums[num - 1]);
}
}
for (int i = 0;i<n;i++){
if (nums[i] >0){
return i +1;
}
}
return n+1;
}
}
力扣第73题:矩阵置零
class Solution {
public void setZeroes(int[][] matrix) {
//1 1
//01 10 12 21
int n = matrix.length;
int m = matrix[0].length;
boolean[] row = new boolean[n];
boolean[] col = new boolean[m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(matrix[i][j] == 0){
row[i] = col[j] = true;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(row[i]||col[j]){
matrix[i][j] =0;
}
}
}
}
}
本文相关图片资源来自于网络中,如有侵权请联系删除!