這個移動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;
? ? }
};
!!!????????????????????????????????注意注意注意 不排序不能比較數值????????????????????????????????????!!!!