数组(1-4)
数组(1-4)
构造乘积数组
嵌套循环,循环给数组B进行赋值,内部分为两个循环,从0-i-1和i+1~n-1
[问题]给数组加值的时候不能用B[i]=A[j],得用B.push_back(A[j])
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int n=A.size();
vector<int> B;
for(int i=0;i<n;i++)
{
int result=1;
for(int j=0;j<i;j++)
{
result *= A[j];
}
for(int k=i+1;k<n;k++)
{
result *= A[k];
}
B.push_back(result);
}
return B;
}
};旋转数组的最小数字
找到分界点(也就是当前一个数的值大于后一个数的值时)while(rotateArray[i]<=rotateArray[i+1])
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
int len=rotateArray.size();
if(len==0)
return 0;
int i=0;
while(rotateArray[i]<=rotateArray[i+1])
i++;
return rotateArray[i+1];
}
};数组中出现次数超过数组长度一半的数字
- 将数组进行冒泡排序
- 定义两个迭代器it1和it2,it1指向数组第一个元素,it2指向第二个元素
- 若*it1=it2,则it2++
- 若*it1!=it2,则it1=it2
- 若it2-it1+1大于一半,返回*it2,否则返回0
[问题1]返回的位置没有考虑清楚,当数组为:1 2 2 2 2 3 5时,返回了3
[问题2]当数组中只有1个元素时不通过,因为没有第二个元素,因此要在第一步考虑
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int len=numbers.size();
if(len==1)
return numbers[0];
int half_len=len/2;
int tmp=0;
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-i-1;j++)
{
if(numbers[j]>numbers[j+1])
{
tmp=numbers[j];
numbers[j]=numbers[j+1];
numbers[j+1]=tmp;
}
}
}
int count=0;
vector<int>::iterator it1=numbers.begin();
vector<int>::iterator it2=it1+1;
while (it2 != numbers.end())
{
if (*it2 == *it1)
{
if (it2 - it1 + 1 > half_len )
{
return *it2;
}
it2++;
}
else
{
it1 = it2;
it2++;
}
}
if (it2 - it1 + 1 > half_len && *it2==*it1)
{
return *it2;
}
else return 0;
}
};数字在排序数组中出现的次数
定义一个count=0
遍历数组,与k相等,则count++
返回count
class Solution { public: int GetNumberOfK(vector<int> data ,int k) { int count=0; for(int i=0;i<data.size();i++) { if(data[i]==k) count++; } return count; } };
SHEIN希音公司福利 261人发布
查看7道真题和解析