LeetCode 189.旋转数组

川长思鸟来 2023-06-29 05:57 36阅读 0赞

问题:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数

解法一:也就是我拿到题想到的解法,旋转k次,每次旋转1个元素

  1. public class Soultion{
  2. public void rotate(int[] nums,int k){
  3. int temp,tail;
  4. for(int i = 0;i < k;i++){
  5. tail = nums[nums.length-1];
  6. for(int j = nums.length-1;j > 0;j--){
  7. nums[j] = nums[j-1];
  8. }
  9. nums[nums.length-1] = tail;
  10. }
  11. }
  12. }

解法二:利用反转,第一步将整个数组进行反转;第二步将前k个元素进行反转;第三步将余下的元素进行反转。

  1. class Solution {
  2. public void rotate(int[] nums, int k) {
  3. k %= nums.length;
  4. reverse(nums,0,nums.length-1);
  5. reverse(nums,0,k-1);
  6. reverse(nums,k,nums.length-1);
  7. }
  8. public void reverse(int[] nums,int begin,int end){
  9. while(begin<end){
  10. int temp = nums[end];
  11. nums[end] = nums[begin];
  12. nums[begin] = temp;
  13. begin++;
  14. end--;
  15. }
  16. }
  17. }

发表评论

表情:
评论列表 (有 0 条评论,36人围观)

还没有评论,来说两句吧...

相关阅读