2020-09-06
第一题: 十进制整数的反码
class Solution {
public:
int bitwiseComplement(int N) {
int temp1 = N;
int temp2 = 1;
if(N==0) return 1;
while(temp1>0) {
N^=temp2;
temp2<<=1;
temp1>>=1;
}
return N;
}
};
第二题:最小移动次数使数组元素相等
class Solution {
public:
int minMoves(vector<int>& nums) {
int min = nums[0];
long long result = nums[0];
for(int i = 1; i < nums.size(); i++) {
result += nums[i];
if(nums[i] < min) {
min = nums[i];
}
}
return result- min*nums.size();
}
};
第三题:最少移动次数使数组元素相等 II
class Solution {
public:
int minMoves2(vector<int>& nums) {
sort(nums.begin(),nums.end());
int i = 0;
int j = nums.size()-1;
int result = 0;
while(i<j) {
result += nums[j--]-nums[i++];
}
return result;
}
};
2020-09-07
第一题:错误的集合
class Solution {
public:
vector<int> findErrorNums(vector<int>& nums) {
sort(nums.begin(),nums.end());
int tmp1;
int lost;
int sum = 0;
int repet;
for(int i = 0; i < nums.size()-1; i++) {
if(nums[i] == nums[i+1]) repet = nums[i];
sum += nums[i];
}
sum+=nums[nums.size()-1];
lost = (nums.size() + 1)*nums.size() / 2 - (sum - repet); //eg. 错误集合 1 2 2 4 已找到repet=2,sum-repet(错误集合剔除重复元素2,即1 2 4),
return {repet,lost};
};
};
2020-09-09
第一题:二进制间距
class Solution {
public:
int binaryGap(int N) {
int tmp1 = 0;
int tmp2 = 0;
int max = 0;
while(N>0){
if(N%2 == 1) {
tmp1++;
}
if(tmp1 > 0) {
tmp2++;
}
if(tmp1 == 2) {
if(tmp2-1 > max) {
max = tmp2-1;
}
tmp1 = 1;
tmp2 = 1;
}
N/=2;
}
return max;
}
};
第二题:好数对的数目
class Solution {
public:
int numIdenticalPairs(vector<int>& nums) {
int number = 0;
for(int i = 0; i < nums.size(); i++) {
for(int j = i+1; j < nums.size(); j++) {
if(nums[i] == nums[j]) {
number++;
}
}
}
return number;
}
};
第三题:缺失数字
class Solution {
public:
int missingNumber(vector<int>& nums) {
int i = 0;
sort(nums.begin(), nums.end());
for(; i < nums.size(); i++) {
if(i != nums[i]) {
return i;
}
}
return i;
}
};
2020-09-10
第一题:阶乘后的零
class Solution {
public:
int trailingZeroes(int n) {
int num = 0;
while(n) {
num+=n/5;
n /= 5;
}
return num;
}
};
第二题:计数质数
class Solution {
public:
int countPrimes(int n) {
int num = 0;
if(n == 0 || n == 1 || n == 2) {
return 0;
}
for(int i = 3; i < n; i+=2) {
for(int j = 3; j <= sqrt(i); j+=2) {
if(i%j == 0) {
num++;
break;
}
}
}
return n/2-num;
}
};
第三题:Excel表列序号
class Solution {
public:
int titleToNumber(string s) {
int res = 0;
for(auto ss : s){
res = res * 26 + (ss - 'A' + 1);
}
return res;
}
};
2020-09-11
第一题:增减字符串匹配
class Solution {
public:
vector<int> diStringMatch(string S) {
vector<int> nums;
//用n和x分别保存插入后下次插入的数据
int n = S.size(), x = 0;
for (char c : S) {
//c=='I' 插入x 并x++
if (c == 'I') {
nums.push_back(x);
x++;
}
else {
//c=='D' 插入n并n--
nums.push_back(n);
n--;
}
}
//最后插入 x++或n--都可以
nums.push_back(n--);
return nums;
}
};
第二题:一年中的第几天
class Solution {
public:
int dayOfYear(string date) {
int year = (date[0]-'0')*1000 + (date[1]-'0')*100 + (date[2]-'0')*10 +date[3]-'0';
int month=(date[5]-'0')*10 + date[6]-'0';
int day=(date[8]-'0')*10 + date[9]-'0';
int months[2][13] = {{0, 31,28, 31, 30, 31, 30, 31,31,30,31, 30, 31},
{0, 31,29, 31, 30, 31, 30, 31,31,30,31, 30, 31}};
int result = 0;
if(year % 400 ==0 || (year%4==0&&year%100!=0)){
for(int i= 0; i < month; i++) {
result += months[1][i];
}
} else {
for(int i= 0; i < month; i++) {
result += months[0][i];
}
}
return result+day;
}
};
第三题:最大数值
class Solution {
public:
int maximum(int a, int b) {
int ans= ((long)abs((long)a-(long)b)+a+b)/2;
return ans;
};
long abs(long a) {
int flag = a >> 63; //正数flag = 0,负数flag = -1
return (flag ^ a) - flag; //任何数与0异或值不变,任何数与-1异或等价于按位取反
}
};
2020-09-12
第一题:在区间范围内统计奇数数目
class Solution {
public:
int countOdds(int low, int high) {
int num = 0;
if(low%2 == 0) { // low是偶数
low+=1;
while(low <= high) {
num++;
low+=2;
}
} else {
while(low <= high) {
num++;
low+=2;
}
}
return num;
}
};
第二题:丑数
class Solution {
public:
bool isUgly(int num) {
if(num == 0) return false;
else if(num == 1) return true;
while(1) {
if(num % 2 == 0) {
num/=2;
}else if(num%3 == 0) {
num/=3;
}else if(num%5 == 0) {
num/=5;
}else{
break;
}
}
if(num == 1) {
return true;
}
return false;
}
};
第三题:缀点成线
class Solution {
public:
bool checkStraightLine(vector<vector<int>>& coordinates) {
double a,b,c,d;
a=coordinates[0][0];
b=coordinates[0][1];
c=coordinates[1][0];
d=coordinates[1][1];
for(auto i:coordinates){
if((i[1]-b)*(c-a)!=(i[0]-a)*(d-b)) return false;
}
return true;
}
};
第四题:将整数转换为两个无零整数的和
class Solution {
public:
vector<int> getNoZeroIntegers(int n) {
int b;
for(int i = 1; i < n; i++) {
b = n-i;
if((to_string(b) + to_string(i)).find('0') == string::npos) {
return {b,i};
}
}
return {};
}
};
2020-09-13
第一题:最大三角形面积
class Solution {
public:
double largestTriangleArea(vector<vector<int>>& points) {
double mmax = 0;
for (int i = 0; i < points.size(); i ++)
for (int j = i + 1; j < points.size(); j ++)
for (int k = j + 1; k < points.size(); k ++)
mmax = max(mmax, 0.5 * abs(points[i][0] * points[j][1] + points[i][1] * points[k][0] + points[j][0] * points[k][1] - points[i][0] * points[k][1] - points[i][1] * points[j][0] - points[j][1] * points[k][0]));
return mmax;
}
};
第二题:打印从1到最大的n位数
class Solution {
public:
vector<int> printNumbers(int n) {
vector<int> nums;
for(int i = 1; i< pow(10,n); i++){
nums.push_back(i);
}
return nums;
}
};
第三题:各位相加
class Solution {
public:
int addDigits(int num) {
int tmp = 0;
while(num) {
tmp += (num%10);
num/=10;
}
if(tmp < 10) {return tmp;}
return addDigits(tmp);
}
};