北尘_:个人主页
个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》
☀️走在路上,不忘来时的初心
文章目录
- 一、移动零
-
- 二、复写零
-
- 三、盛水最多的容器
-
- 四、快乐数
-
一、移动零
1、题目讲解
2、讲解算法原理
3、代码实现
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for(int cur=0,dest=0;cur<nums.size();cur++)
{
if(nums[cur])
{
swap(nums[cur],nums[dest++]);
}
}
}
};
二、复写零
1、题目讲解
2、讲解算法原理
3、代码实现
class Solution {
public:
void duplicateZeros(vector<int>& arr) {
int cur=0,dest=-1,n=arr.size();
while(cur<n)
{
if(arr[cur]) dest++;
else dest+=2;
if(dest>=n-1) break;
cur++;
}
if(dest==n)
{
arr[n-1]=0;
cur--;
dest-=2;
}
while(cur>=0)
{
if(arr[cur]) arr[dest--]=arr[cur--];
else
{
arr[dest--]=0;
arr[dest--]=0;
cur--;
}
}
}
};
三、盛水最多的容器
1、题目讲解
2、讲解算法原理
3、代码实现
class Solution {
public:
int maxArea(vector<int>& height) {
int max=0,begin=0,end=height.size()-1;
while(begin<end)
{
if(height[begin]>height[end])
{
int v1=height[end]*(end-begin);
if(v1>max)
max=v1;
--end;
}
else
{
int v2=height[begin]*(end-begin);
if(v2>max)
max=v2;
++begin;
}
}
return max;
}
};
四、快乐数
1、题目讲解
2、讲解算法原理
3、代码实现
class Solution {
public:
int bigsum(int n )
{
int sum=0;
while(n)
{
int ret=n%10;
sum+=ret*ret;
n/=10;
}
return sum;
}
bool isHappy(int n) {
int slow=n,fast=bigsum(n);
while(fast!=slow)
{
fast=bigsum(bigsum(fast));
slow=bigsum(slow);
}
return slow==1;
}
};