首页 > 其他 > 详细

剑指offer(6)

时间:2020-05-31 15:54:05      阅读:43      评论:0      收藏:0      [点我收藏+]

本:将数组中的偶数放到奇数后面 && 输出链表倒数第k个节点

#题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

刚看到这题,我脑子乱掉了。如果new一个数组来放偶数,觉得消耗太大,不符合高效的思想。为了相对位置不变这个条件,我想到了冒泡排序,偶数在奇数前面就调换位置。

冷静下来,还是要先把暴力解法先放到前面。不然怎么体现我冒泡的好呢

#暴力解法

遍历数组,偶数拿出来放到新的数组中并删掉原数组中的偶数。遍历结束,将新数组拼接到旧数组后面

因为Java并没有提供数组的add和move函数,所以

public void reOrderArray(int [] array){

  Vector<Integer> odd = new Vector<Integer>();

  Vector<Integer> even = new Vector<Integer>();

  for(int i = 0; i< array.length; i++){

    if(array[i] % 2 == 0){

      even.add(array[i]);

    }else if(arrau[i] % 2 != 0){

      odd.add(array[i]);

    }

  }

  odd.addAll(even);

  for(int j = 0; j<odd.length; j++){

    array[j] = odd.get[j];

  }

}

以上使用向量是因为可以方便的使用add函数。如果要用数组,多用几个指针也可

#冒泡方法 循环比较,如果偶数后面是奇数,则对换位置

public void reOrderArray(int[] array){

  boolean isSwap = false;

  for(int i = 0; i < array.length; i++){

    for(int j = array.length-1; j > i; j--){

      isSwap = false;

      if(array[j] % 2 == 1 && array[j-1] %2 == 0){

        isSwap = true;

        int temp = array[j];

        array[j] = array[j-1];

        array[j-1] = temp;

      }

      if( !isSwap)

        break;

    }

  }

}

 

#题目 输入一个链表,输出该链表中倒数第k个节点

经典的双指针法

先让第一个指针right 从头节点开始往前走k步,然后让第二个指针left 从头指针开始,left和right两个指针一起向前走,当right走到最后的时候,left指向的正是链表中倒数第k个节点

这其中需要注意的有

1. 判断链表是否为空

2. 判断k是否为0,若为0则代表要求输出倒数第0个节点,无意义

3. 判断链表是否有k个节点

public ListNode pointKfromList(ListNode head,int k){

  if(head == null || k == 0)  return null;

  ListNode right = head;

  for(int i = 0; i < k-1; i++){

    if(right.next != null)

      right = right.next;

    else

      return null;

  }

  ListNode left = head;

  while(right.next != null){

    right = right.next;

    left = left.next;

  }

  return left;

}

堆栈

也可将链表压入栈中,push出k个节点

剑指offer(6)

原文:https://www.cnblogs.com/cherry-BAIL/p/13006477.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!