这个移动0的问题还是比较重要的 因为涉及到一种思想:快慢指针!
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int slow=0,fast=0;
for(;fast<nums.size();fast++){
if(nums[fast]!=0){
swap(nums[slow],nums[fast]);
slow++;
}
}
for(;slow<nums.size();slow++){
nums[slow]=0;
}
}
};
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int i=0,j=(k%(nums.size())-1);
if(k==0)
return;
reverse(nums.begin(),nums.end());
reverse(nums.begin(),nums.begin()+j+1);
reverse(nums.begin()+j+1,nums.end());
}
};
第二题 主要是左旋和右旋的问题 还是要搞清楚!右旋是先反转整个字符串
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int sum=0;
int leftsum=0;
int rightsum=0;
for(int i=0;i<nums.size();i++){
sum+=nums[i];
}
for(int i=0;i<nums.size();i++){
rightsum=sum-leftsum-nums[i];
if(leftsum==rightsum){
return i;
}
leftsum+=nums[i];
}
return -1;
}
};
!!! 注意注意注意 不排序不能比较数值 !!!!