当前位置:   article > 正文

leetcode刷题之旋转数组:给定一个数组,将数组中的元素向右移动 k个位置,其中k是非负数。_leetcode 数组移动k

leetcode 数组移动k

举例:

解法一:双循环,外面的循环k次,里面的循环首先保存最后一位数字,然后依次让后一位数等于前一位数,移动numsSize-1次,再把nums[0]赋值为最开始保存的最后一位数字。

  1. void rotate(int* nums,int numsSize,int k)
  2. {
  3. int i=0;
  4. for(i=0,i<k;i++)
  5. {
  6. int tmp=nums[numsSize-1];
  7. for(int end=numsSize-2;end>=0;end--)
  8. {
  9. nums[end+1]=nums[end];
  10. }
  11. nums[0]=tmp;
  12. }
  13. }

解法二:将后k个倒置,再将前n-k个数倒置(n为数组元素个数),最后将整个数组倒置。

  1. void reverse(int* nums,int left,int right)
  2. {
  3. while(left<right)
  4. {
  5. int tmp=nums[0];
  6. int nums[left]=nums[right];
  7. int nums[right]=tmp;
  8. left++;
  9. right--;
  10. }
  11. }
  12. void rotate(int* nums,int numsSize,int k)
  13. {
  14. //防止数组越界访问
  15. if(k>numsSize)
  16. {
  17. k%=numsSize;
  18. }
  19. reverse(nums,numsSize-k,numsSize-1);
  20. reverse(nums,0,numsSize-k-1);
  21. reverse(nums,0,numsSize-1);
  22. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/567456
推荐阅读
相关标签
  

闽ICP备14008679号