86 单链表的分解
  52GAVQomAIg5 2024年03月12日 77 0

你说你会改变,但是你只是为了解决当时的冲突而讲的话。

给你一个链表头节点head和x,要求链表中所有小于x的节点都出现在大于或等于x的节点之前

例如:head = [1,4,3,2,5,2], x = 3;

输出:[1,2,2,4,3,5]

在合并两个链表的时候,是将两个链表合并成一个,拆分的时候,是将一个链表拆分成两个。这中间涉及了什么,你知道吗。

这道题的解题思路是使用两个链表,一个用来保存比x小的,一个用来保存比x大的,将原始链表遍历结束之后,小的那个链表的尾指针的next指向大的那个链表的虚拟头指针的next,这样就拼接起来整个链表了。

代码如下:

class Solution {
    /**
     * 思想:
     * 双指针,左指针指向数组最左侧的数据,右指针指向数组结尾
     * 循环结束的出口是两个指针相遇,也就是说这个算法是两个指针的方向不一样
     * 指针移动的条件是,如果左指针指向的数据对应的更高,就是height[left]<hight[right],左指针右移,反之右指针左移,这样可以保证面积更大
     * @param height
     * @return
     */
    public int maxArea(int[] height) {
        int left = 0;
        int right = height.length - 1;
        int maxArea = 0;

        while (left < right){
            int area = Math.min(height[left],height[right]) * (right - left);
            maxArea = Math.max(maxArea,area); // 取最大的

            if (height[left] < height[right]){
                left++;
            } else {
                right--;
            }

        }
        return maxArea;

    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年03月12日 0

暂无评论

推荐阅读
  jTMfQq5cr55P   2024年05月17日   42   0   0 算法与数据结构
  jTMfQq5cr55P   2024年05月17日   38   0   0 算法与数据结构
52GAVQomAIg5