赞
踩
举例:
解法一:双循环,外面的循环k次,里面的循环首先保存最后一位数字,然后依次让后一位数等于前一位数,移动numsSize-1次,再把nums[0]赋值为最开始保存的最后一位数字。
- void rotate(int* nums,int numsSize,int k)
- {
- int i=0;
- for(i=0,i<k;i++)
- {
- int tmp=nums[numsSize-1];
- for(int end=numsSize-2;end>=0;end--)
- {
- nums[end+1]=nums[end];
- }
- nums[0]=tmp;
- }
- }
解法二:将后k个倒置,再将前n-k个数倒置(n为数组元素个数),最后将整个数组倒置。
- void reverse(int* nums,int left,int right)
- {
- while(left<right)
- {
- int tmp=nums[0];
- int nums[left]=nums[right];
- int nums[right]=tmp;
- left++;
- right--;
- }
- }
-
-
- void rotate(int* nums,int numsSize,int k)
- {
- //防止数组越界访问
- if(k>numsSize)
- {
- k%=numsSize;
- }
- reverse(nums,numsSize-k,numsSize-1);
- reverse(nums,0,numsSize-k-1);
- reverse(nums,0,numsSize-1);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。