数组(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];

    }
};

数组中出现次数超过数组长度一半的数字

  1. 将数组进行冒泡排序
  2. 定义两个迭代器it1和it2,it1指向数组第一个元素,it2指向第二个元素
  3. 若*it1=it2,则it2++
  4. 若*it1!=it2,则it1=it2
  5. 若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;
    }
};

数字在排序数组中出现的次数

  1. 定义一个count=0

  2. 遍历数组,与k相等,则count++

  3. 返回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;
    
     }
    };
全部评论
数组中出现次数超过一半的数字: 1.[排序]将原数组排序,如果存在的话,一定在中间位置; 2.[判断]然后遍历数组,数一下中间位置的数有几个,如果超过一半返回;否则返回0
点赞 回复 分享
发布于 2020-04-13 22:42

相关推荐

10-16 11:21
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务