目录
LeetCode1295.统计位数为偶数的数字
常规解法,一分钟没AC就算不合格吧
class Solution {
public:
int findNumbers(vector<int>& nums) {
int sum = 0;
for(int i=0;i<nums.size();i++){
int n = 0;
while(nums[i]>0){
nums[i]/=10;
n++;
}
if(n%2==0)
sum++;
}
return sum;
}
};
强制类型转换,用to_string转换成string类型再判断!
class Solution {
public:
int findNumbers(vector<int>& nums) {
int sum = 0;
for(int i=0;i<nums.size();i++){
string tmp = to_string(nums[i]);
if(tmp.size()%2==0)
sum++;
}
return sum;
}
};
LeetCode1252.奇数值单元格的数组
记得不是全局变量的话要自己手动赋值为零,简单模拟即可,水题
class Solution {
public:
int oddCells(int n, int m, vector<vector<int>>& indices) {
int a[n][m];
//必须要这样赋值0
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
a[i][j] = 0;
for(int i=0;i<indices.size();i++){
for(int k=0;k<m;k++){
a[indices[i][0]][k]++;
}
for(int l=0;l<n;l++){
a[l][indices[i][1]]++;
}
}
int num=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(a[i][j]%2!=0)
num++;
return num;
}
};
LeetCode1304.和为零的N个唯一整数
中奖……当然其他的解法有很多,自行DIY
class Solution {
public:
vector<int> sumZero(int n) {
vector<int> v;
if(n%2==0)
for(int i=-n/2;i<=n/2;i++){
if(i!=0)
v.push_back(i);
}
else{
for(int i=-n/2;i<=n/2;i++){
v.push_back(i);
}
}
return v;
}
};
LeetCode1299.将每个元素替换为右侧最大元素
先一顿瞎暴力,瞎几把乱搞一通AC就对了哈哈
class Solution {
public:
vector<int> replaceElements(vector<int>& arr) {
//先瞎暴力AC再说
int i;
for(i=0;i<arr.size()-1;i++){
int maxnum = -(1<<21);
for(int j=i+1;j<arr.size();j++){
maxnum = arr[j]>maxnum?arr[j]:maxnum;
}
arr[i] = maxnum;
}
arr[i] = -1;
return arr;
}
};
其实改进的方法是每次最大位置不用重复查找,记录其下标就行;
可以将复杂度降低,从O(n^n)降为O(n)
LeetCode26.删除排序数组中的重复项
讨巧写法:利用set自动去重的特性(不推荐)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
set<int> s(nums.begin(),nums.end());
int i=0;
for(set<int>::iterator it = s.begin();it!=s.end();it++){
nums[i++] = *it;
}
return s.size();
}
};
dalao写法,我是想不来;
解释一下,答案会对数组自动切片去前n个数,所以直接赋值不管后面的数是怎样就好
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size()<2)
return nums.size();
int i = 0;
int size = nums.size();
for(int j = 1;j<size;j++){
if(nums[j]!=nums[i])
nums[++i] = nums[j];
}
return ++i;
}
};
LeetCode面试题16.01.交换数字
这题真是佛,我只能说这骚操作666
我佛了
class Solution {
public:
vector<int> swapNumbers(vector<int>& numbers) {
if(numbers[0]>0 && numbers[1]>0 || numbers[0]<0 && numbers[1]<0){
numbers[0]=-numbers[0];
numbers[0]=numbers[0]+numbers[1];
numbers[1]=numbers[1]-numbers[0];
numbers[0]=numbers[0]+numbers[1];
}else{
numbers[0]=numbers[0]+numbers[1];
numbers[1]=numbers[0]-numbers[1];
numbers[0]=numbers[0]-numbers[1];
}
return numbers;
}
};
LeetCode1313.解压缩编码列表
水题……这都能中奖,佛了
class Solution {
public:
vector<int> decompressRLElist(vector<int>& nums) {
vector<int> v;
for(int i=0;i<nums.size();i+=2)
for(int j = 0;j<nums[i];j++)
v.push_back(nums[i+1]);
return v;
}
};
LeetCode1351.统计有序矩阵中的负数
明显是二分,但是我二分还没有开始刷,不管,先花30秒A一遍再说
今天因为出去钓鱼耽误了刷链表的进度,还是这两天尽快把链表刷熟练了,开始二分!
class Solution {
public:
int countNegatives(vector<vector<int>>& grid) {
int sum = 0;
for(int i=0;i<grid.size();i++)
for(int j = 0;j<grid[i].size();j++)
if(grid[i][j]<0)
sum++;
return sum;
}
};
LeetCode面试题01.07.旋转矩阵
这题略显无聊……
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
if(matrix.size()==0||matrix.size()!=matrix[0].size())
return;
int n = matrix.size();
for(int layer = 0;layer<n/2;layer++){
int first = layer;
int last = n-1-layer;
for(int i=first;i<last;i++){
int offset = i-first;
int top = matrix[first][i];//存储上边
//左边移动到上边
matrix[first][i] = matrix[last-offset][first];
//下边移动到左边
matrix[last-offset][first] = matrix[last][last-offset];
//右边移动到下边
matrix[last][last-offset] = matrix[i][last];
//上边移动到右边
matrix[i][last] = top;
}
}
return;
}
};