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