leetcode_01数组
原文链接:https://blog.csdn.net/qq_39355828/article/details/110840531 (opens new window)
# leetcode_01数组
1.给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
题解:数组不仅要找出和val相同的数,还要进行移除,且不能申请新的空间。所以当遇到相同的元素时,应该将所有元素向前移动,并将这个相同元素放到数组的末尾,同时使得数组长度减一,达到去除的目的,最后返回数组长度n。
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n=nums.size();
for(int i=0;i<n;i++)
{
if(nums[i]==val)
{
for(int j=i+1;j<n;j++)
{
nums[j-1]=nums[j];
}
i--;//指针前移,也应该向前移动
n--;
}
}
return n;}
};
int main()
{
int val=3;
vector<int> nums;
nums.push_back(2);
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
int size1=nums.size();
Solution ss;
int kk=ss.removeElement(nums,val);
cout<<(size1-kk)<<endl;
return 0;
}
2.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2.给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。
请返回 nums 的动态和。
示例 1:
输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/running-sum-of-1d-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> runningSum(vector<int>& nums)
{ int i=0,j=0;
vector<int> v1(nums.size(),0);
for(i=0;i<nums.size();i++)
{
for(j=0;j<=i;j++)
{
v1[i]=v1[i]+nums[j];
}
}
return v1;
}
};
int main() {
vector<int> v1(5,1);
vector<int> v2(5,1);
Solution so;
v2= so.runningSum(v1);
for(int i=0;i<v2.size();i++)
{
cout<<v2[i]<<" ";
}
cout<<endl;
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
3.给你一个数字数组 arr 。
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。
示例 1:
输入:arr = [3,5,1]
输出:true
解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成等差数列。
示例 2:
输入:arr = [1,2,4]
输出:false
解释:无法通过重新排序得到等差数列。
#include<iostream>
#include<vector>
#include<stdio.h>
#include<algorithm>
using namespace std;
class Solution{
public:
bool canMakeArithmeticProgression(vector<int>& arr)
{
int i,j,temp,sum=0;
vector<int> ss((arr.size()-1));
for(i=0;i<arr.size()-1;i++)
{
for(j=0;j<arr.size()-i-1;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(i=1;i<arr.size();i++)
{
ss[i-1]=arr[i]-arr[i-1];
}
for(i=0;i<ss.size()-1;i++)
{
if(ss[i]!=ss[i+1])
break;
}
if(i>=(ss.size()-1))
return true;
else
return false;
}
};
int main()
{
Solution so;
vector<int> ss={3,5,1};
bool ans=so.canMakeArithmeticProgression(ss);
cout<<ans<<endl;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
4.给你一个整数数组 nums 。
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
返回好数对的数目。
示例 1:
输入:nums = [1,2,3,1,1,3]
输出:4
解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始
#include<iostream>
#include<vector>
/*给你一个整数数组 nums 。
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
返回好数对的数目。
示例 1:
输入:nums = [1,2,3,1,1,3]
输出:4
解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始*/
using namespace std;
class Solution {
public:
int numIdenticalPairs(vector<int>& nums)
{
int sum=0;
for(int i=0;i<nums.size()-1;i++)
{
for(int j=i+1;j<nums.size();j++)
{
if(nums[j]==nums[i])
sum++;
}
}
return sum;
}
};
int main()
{
vector<int> ss={1,2,3,1,1,3};
Solution so;
int sum=so.numIdenticalPairs(ss);
cout<<sum<<endl;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34