Leetcode刷题之矩阵中的指针用法
作者:互联网
矩阵中的指针用法
1 快慢指针
Leetcode27移除元素
- 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
public int removeElement(int[] nums, int val) {
int fastIndex=0;
int slowIndex=0;
while(fastIndex<nums.length){
if(nums[fastIndex]!=val){
nums[slowIndex]=nums[fastIndex];
slowIndex++;
}
fastIndex++;
}
return slowIndex;
}
2 左右指针
二分查找(略)
Leetcode209长度最小的子数组
- 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0
- 输入:target = 7, nums = [2,3,1,2,4,3]
- 输出:2
public int minSubArrayLen(int target, int[] nums) {
int leftIndex=0;
int rightIndex=0;
int size=0;
int minSize=Integer.MAX_VALUE;
int sum=0;
while(rightIndex<nums.length){
sum+=nums[rightIndex];
while(sum>=target){
size=rightIndex-leftIndex+1;
if(minSize>size){
minSize=size;
}
sum-=nums[leftIndex];
leftIndex++;
}
rightIndex++;
}
return minSize==Integer.MAX_VALUE?0:minSize;
}
Leetcode581最短无序连续子数组
- 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。
- 输入:nums=[2,6,4,8,10,9,15]
- 输出:5
public int findUnsortedSubarray(int[] nums) {
//初始化
int len = nums.length;
int min = nums[len - 1];
int max = nums[0];
int begin = 0, end = -1;
//遍历
for (int i = 0; i < len; i++) {
if (nums[i] < max) { //从左到右维持最大值,寻找右边界end
end = i;
} else {
max = nums[i];
}
if (nums[len - i - 1] > min) { //从右到左维持最小值,寻找左边界begin
begin = len - i - 1;
} else {
min = nums[len - i - 1];
}
}
return end - begin + 1;
}
标签:target,nums,int,矩阵,len,minSize,数组,Leetcode,刷题 来源: https://www.cnblogs.com/fao99/p/16080952.html