关于数组
704二分法查找
class Solution{
public:
int search(vector<int>nums, int target){
int left = 0;
int right = nums.size() -1;
while (left <= right){
int mid = (left + right)/2;
if(target > nums[mid]){
left = mid+1;
}else if(target < nums[mid]){
right = mid-1;
}else{
return mid;
}
}
return -1;
}
};
27. 移除元素
方法1:两层循环解决
class Solution{
public:
int removeElement(vector<int> nums, int val){
for(int i=0 ; i<nums.size(); i++){
for(int j=i+1; j<nums.size(); j++){
nums[j-1] = nums[j];
}
nums.size()--;
}
}
}
//方法2:双指针
class Solution{
}
977.有序数组的平方
思路:
//1.对数组A平方
//2.在对A排序 sort()
//1.对数组A平方
//2.在对A排序 sort()
class Solution{
public:
vector <int> sortedSquares(vector<int> nums){
for(int i=0; i<nums.size(); i++){
nums[i] = nums[i]*nums[i];
}
sort(nums.begin(), nums.end());
return nums;
}
};
//首先 对数组进行平方
//其次 对数组排序 冒泡排序
class Solution{
public:
vector<int>sortedSquares(vector<int> A){
for(int i=0; i<A.size(); i++){
A[i]*=A[i];
}
//冒泡排序
}
}
//双指针思路:
//数组平方后两端最大,中间最小
//双指针思路
//数组平方后两端最大,中间最小
class Solution{
public:
vector<int>sortedSquares(vector<int>&A){ //拷贝构造 将vector<int>&A 拷贝构造给sorttsquare
vector<int> result(A.size(), 0); //result的长度为A.size() 大小为0
int k= result.size() -1;
int j= A.size() - 1;
for(int i=0; i<=j; ){
if(A[i]*A[i] < A[j]*A[j]){
result[k] = A[j]*A[j];
k--;
j--;
}else if(A[i]*A[i] >= A[j]*A[j]){
result[k] = A[i]*A[i];
k--;
i++;
}
} return result;
}
};
209.长度最小的子数组
方法一: 利用双层循环求解 在力扣上时间会超出限制
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = INT32_MAX; //定义result取最大
int subl = 0;//长度
for(int i=0; i<nums.size(); i++){
int sum=0 ;
for(int j=i; j<nums.size(); j++){
sum = sum +nums[j];
if(sum>=target){
subl = j-i+1;
result = min(result,subl);
break; //不写这条语句也可以 因为找到大于target之后的subl ; 后面的长度会更大于subl
}
}
}return result= result==INT32_MAX ? 0:result;
}
};
方法二: 双指针法
思路: 当target >sum i++
当target<sum j++
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int i=0 , subl=0, sum=0, result=INT32_MAX;
for(int j=0 ; j<nums.size(); j++){
sum+=nums[j];
while(sum>=target){
subl=j-i+1;
sum= sum-nums[i];
i++;
result = min(subl, result);
}
}return result==INT32_MAX?0:result;
}
};