精华内容
下载资源
问答
  • 链表排序问题(leetcode试题)题目描述:Sort a linked list in O(n log n) time using constant space complexity. Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和...

    题目描述:Sort a linked list in O(n log n) time using constant space complexity.

    问题分析

    时间复杂度为O(nlogn)的排序算法一般有快速排序和归并排序两种。通常情况下快速排序适用于数组,基于链表的快速排序要重新设计指针扫描方案。而自底向上的归并排序本身比较适合与链表。

    快速排序

    参考http://blog.csdn.net/otuhacker/article/details/10366563的方法,博主给出的是cpp,此处附上Java代码

    public class QuickSort 
    {
        public static ListNode sortList(ListNode head)
        {
            sortList(head,null);
            return head;
        }
        private static void sortList(ListNode h,ListNode e)
        {
            if(h==e) return;
            ListNode mid=partition(h,e);
            sortList(h,mid);
            sortList(mid.next,e);
        }
        private static ListNode partition(ListNode h,ListNode e)//切分
        {
            int k=h.val;
            ListNode i=h,j=h.next;
            while(j!=e)
            {
                if(j.val<k)
                {
                    i=i.next;
                    exch(i,j);
                }
                j=j.next;
            }
            exch(h,i);
            return i;
        }
        private static void exch(ListNode i,ListNode j)
        {
            int temp=j.val;
            j.val=i.val;
            i.val=temp;
        }
    }

    归并排序

    自底向上的归并排序只需要重新组织链表链接就能将链表原地排序
    java版本1

    public class MergeSort { // 归并排序
        public static ListNode sortList(ListNode head)//自底而上
        {
            int N=0;
            for(ListNode k=head;k!=null;k=k.next) N++;
            ListNode p=new ListNode(0);
            p.next=head;
            ListNode h=p;
            for(int sz=1;sz<N;sz=sz+sz)
            {
                p=h;
                while(p.next!=null)
                {
                    p =merge(p, sz);
                }
            }
            return h.next;
        }
        private static ListNode merge(ListNode p,int sz)
        {
            int c=0;
            ListNode i=p,j=p;
            for(int k=0;k<sz&&j.next!=null;k++)
                j=j.next;
            ListNode m=j;
            while(true)
            {
                if(c>=sz||j.next==null) break;
                if(i==m){j=j.next;c++;continue;}
                if(i.next.val<=j.next.val)
                    i=i.next;
                else
                {
                    insert(i, j);
                    c++;
                }
            }
            return j;
        }
        private static void insert(ListNode i,ListNode j)
        {
            ListNode k=j.next;
            j.next=j.next.next;
            k.next=i.next;
            i.next=k;
            i=k.next;
        }
    }

    leetcode 自上而下代码

    public class Solution {
        public ListNode sortList(ListNode head) {
            if (head == null || head.next == null)
                return head;
            ListNode slow = head;
            ListNode fast = head.next;
            while (fast != null && fast.next != null) {
                slow = slow.next;
                fast = fast.next.next;
            }
            ListNode right = sortList(slow.next);
            slow.next = null;
            ListNode left = sortList(head);
            // /待左右两边各自有序,进行归并即可
            ListNode temp_head = new ListNode(0);
            ListNode temp_node = temp_head;
            while (left != null && right != null) {
                if (left.val < right.val) {
                    temp_node.next = left;
                    left = left.next;
                } else {
                    temp_node.next = right;
                    right = right.next;
                }
                temp_node = temp_node.next;
            }
            if (left != null)
                temp_node.next = left;
            if (right != null)
                temp_node.next = right;
            return temp_head.next;
        }
    }
    展开全文
  • 如何使用idea插件刷LeetCode试题

    千次阅读 2020-07-13 20:02:18
    如何使用idea中的插件去刷LeetCode中的试题 步骤如下: 1.选中File点击Settings,选中Plugins,搜索LeetCode,去下载leetcode插件 2.下载完成后重启idea,右下角会有leetcode菜单, 配置 File->Settings->...

    如何使用idea中的插件去刷LeetCode中的试题

    步骤如下:

    1.选中File点击Settings,选中Plugins,搜索LeetCode,去下载leetcode插件
    在这里插入图片描述
    2.下载完成后重启idea,右下角会有leetcode菜单,
    在这里插入图片描述

    配置

    File->Settings->Tools->leetcode plugin
    配置过程中可以设置自己的解题模板,当然也可以使用自定义下的模板。
    在这里插入图片描述
    说明:
    Custom code template: 开启使用自定义模板,否则使用默认生成格式
    CodeFileName: 生成文件的名称,默认为题目标题
    CodeTemplate: 生成题目代码的内容,默认为题目描述和题目代码
    TemplateConstant: 模板常用变量
    ${question.title}:题目标题,例如:两数之和
    ${question.titleSlug}:题目标记,例如:two-sum
    ${question.frontendQuestionId}:题目编号,例如:1
    ${question.content}:题目描述内容
    ${question.code}:题目代码部分
    $!velocityTool.camelCaseName(str):一个函数,用来将字符串转化为驼峰样式

    注意

    在生成的自定义代码中包含两行关键信息:
    //leetcode submit region begin(Prohibit modification and deletion):提交到leetcode进行验证的代码开始标记
    //leetcode submit region end(Prohibit modification and deletion):提交到leetcode进行验证的代码结束标记
    这两行标记标示了提交到leetcode服务器进行验证的代码范围,在此范围内只允许有出现与题目解答相关的内容,出现其他内容可能导致leetcode验证不通过。
    除了此范围内,其他区域是可以任意填写的,内容不会提交到leetcode,可以增加一些可以本地调试的内容,例如:import java.util.Arrays;
    所以,这两行内容是不能被删除和修改的,否则将识别不到提交的内容。

    插件的使用

    鼠标右键出现以下界面,提交代码即可。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • LeetCode试题分类

    2014-04-06 12:40:55
    与Tree相关的题目:

    与Binary Tree相关的题目:

    Balanced Binary Tree

    Binary Tree Inorder Traversal

    Binary Tree Level Order Traversal

    Binary Tree Level Order Traversal II

    Binary Tree Maximum Path Sum

    Binary Tree Postorder Traversal

    Binary Tree Preorder Traversal

    Binary Tree Zigzag Level Order Traversal

    Construct Binary Tree from Inorder and Postorder Traversal

    Construct Binary Tree from Preorder and Inorder Traversal

    Convert Sorted Array to Binary Search Tree

    Convert Sorted List to Binary Search Tree

    Maximum Depth of Binary Tree

    Minimum Depth of Binary Tree

    Populating Next Right Pointers in Each Node

    将每一行看成一个链表,链表的头就是最左边的节点。循环便利整个链表。

    对于每个节点:

    1. 将左右子节点链接起来

    2. 将右边的子节点存到一个变量当中。

    3. 如果临时变量不为空,则将临时变量的next指针指向当前节点的左子节点

    Populating Next Right Pointers in Each Node II

    相比于完全二叉树的情况,对于普通二叉树要做如下修改:

    1. 关于每行的头节点:

        遍历当前行,知道找到第一个非空的子节点。如果没有,说明是最后一行,那么就退出

    2. 临时变量存储的不是左子节点,就是右子节点。

    3. 如果左子节点为空,则临时变量链接当前节点的右子节点。

        如果左子节点不为空,则链接当前节点的左子节点

        如果子节点都为空,则直接链接空。

    Same Tree

    Symmetric Tree

    Unique Binary Search Tree

    Unique Binary Search Tree II

    Flatten Binary Tree to Linked List

    Recover Binary Search Tree

    Sum Root to Leaf Numbers

    递归遍历 + Stack存储每个叶子节点组成的数字

    Path Sum

    Path Sum II


    与链表,数组,集合相关的题目:

    Best Time to Buy and Sell Stock I

    Best Time to Buy and Sell Stock II

    Best Time to Buy and Sell Stock III

    Linked List Cycle

    1. Slow和Fast都从Head开始搜索,这样最后得到的Slow和Fast相交的节点可以方便的计算环的入口

    2. While的判断条件是Fast != null && Fast.next != null

    3. 一定要在While循环的最后判断Fast和Slow是否相等,如果相等,则break;

    Linked List Cycle II

    1. 设置一个指针指向Head,另一个指针指向汇合点。 然后每次移动两个指针一步,直到两个指针相交,正好是环的入口

    从Head到环的入口的距离: a

    从环的入口到汇合点的距离 : b

    整个环的长度是: r

    2(a + b) = b + nr + a

          a + b = nr

           a + b = (n - 1)r + r

           a + b = (n - 1)r + L - a

                  a = (n - 1)r + L - a - b

    L - a - b 恰恰是从汇合点到入口的距离

    a 是从head到达入口点的距离


    Remove Duplicates from Sorted List

    Remove Duplicates from Sorted List II

    Search Insert Position

    Maximum Subarray

    Remove Element

    Swap Nodes in Pairs

    Merge Sorted Array

    Sort List

    Reorder List

    在有大数据的时候,效率不够好。 Time Limited Exceeded.

    Copy List with Random Pointer

    因为是要求深拷贝,所以要将每个新的node的RandomListNode指向相应新的Node

    整个算法分为三步:

    1. 复制旧的node,每一个新的node作为旧的node的next node

    2. 依次拷贝每个旧的节点的RandomListNode

    3. 将旧的node和新的node分成两个独立的List


    Longest Consecutive Sequence

    Reverse Linked List II

    Subsets

    Subsets II

    Partition List

    Search In Rotated Sorted Array II

    Rotate List

    先扫面一遍Linked List获得大小

    用mod运算计算出往右移动的真实距离

    Merge Sorted Array

    Merge K Sorted Lists

    Remove Nth node From End of List

    Median of Two Sorted Arrays


    与字符串相关的题目:

    Distinct Subsequence

    Implement strStr()

    Interleaving String

    Longest Palindromic Substring

    Longest Substring without Repeating Characters

    Multiply String

    Minimum Substring Window

    Palindrome Number

    Palindrome Partitioning

    Palindrome Partitioning II

    Valid Palindrome

    Regular Expression Matching

    Scramble String

    String to Integer(atoi)

    Substring with Concatenation of All Words

    Word Break

    Work Break II

    Word Ladder

    Word Ladder II

    Word Search


    与数学相关的题目:


    与图和Matrix相关的题目:


    展开全文
  • 问题描述: 颠倒整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入: 123 输出: 321 ...假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。...代...

    问题描述:

    颠倒整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。

    示例 1:

    输入: 123
    输出: 321
    

     示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

    假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

    代码:

    class Solution2 {
        public int reverse(int x) {
            int y=0;
            while(x!=0) {
                int temp=y;
                //颠倒整数
                y=y*10+x%10;
                x/=10;
                //检查是否溢出
                if(temp != (y-x%10)/10) {
                    return 0;
                }
                
            }
            return y;
        }
    }

     

    展开全文
  • 一、试题描述 给定一个链表,判断链表中是否有环,如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。如果链表中存在环,则返回 true 。 否则,返回 false 。 示例: ` 输入:head = [3,2...
  • leetcode试题总结<8>

    2016-08-27 17:01:24
    257. Binary Tree Paths 题意:给定一个二叉树,返回其从根到叶子节点的每一条路径 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;... * TreeNode *right;...
  • leetcode试题总结<7>

    2016-08-23 17:22:44
    144. Binary Tree Preorder Traversal 题意:实现二叉树的前序遍历 //iterate 1 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;... * Tre
  • leetcode试题总结<6>

    2016-08-22 18:21:14
    试题大意:这道题让我们实现一个迷你解析器用来把一个字符串解析成NestInteger类。 ;">/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or ...
  • leetcode 试题总结<5>

    2016-08-20 17:28:18
    本篇开始说明栈和队列的题目 232. Implement Queue using Stacks //功能:使用栈结构执行队列结构的操作 //注意:只能使用栈结构的标准操作:即push、pop、peek、size、empty。class Queue { ...
  • LeetCode试题之判断是否是平衡二叉树

    千次阅读 2016-11-20 11:25:05
    /** * 本题题意:判断一棵树是否是平衡二叉树,平衡二叉树的左右子树的高度相差不会超过1 * * 解题思路:其实还是获取左右子树的高度 如果差别查过1,那么就返回false * * 错误想法:只要获取左子树高度和右...
  • 题目描述如下:    通过分析题目逻辑,罗马数字使用Map存储,调用String的CharAt方法提取字符串中的特定位置字符。 map.get(Object key):获取给定key对应的值; char CharAt(int index):取字符串中存放...
  • //求一个矩阵中从左上角到右下角的路线条数 //使用dp的方法 import java.util.*; public class Uniquepath{ public static void main(String[] args) { Uniquepath uniquepath = new Uniquepath();...
  • /** * * * Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a total of 5 unique BST's. 1
  • LeetCode试题——1. 两数之和 Two Sum

    千次阅读 2018-03-04 15:55:46
    两数之和-点击查看题目要求方法一、蛮力法class Solution { public int[] twoSum(int[] nums, int target) { for(int i=0;i&lt;nums.length;i++){ for(int j=i+1;j&lt;nums.length;... if(nu...
  • leetcode试题之二进制加法--java实现

    千次阅读 2016-11-19 19:55:12
    /* 本题的需求是:给出两个字符串,内容是二进制数字,编写计算两个二进制数字和的程序。 难点是考虑周到,尤其是最后的一个进位,容易遗忘。 */ import java.util.ArrayList;...class AddBinary{ ...
  • Given a positive integer a, find the smallest positive integer b whose multiplication of each digit equals to a. If there is no answer or the answer is not fit in 32-bit signed integer, then return 0
  • Leetcode部分试题解析

    2016-11-25 10:41:43
    收藏了Leetcode基本试题64道,每到题目都用python编写,对python感兴趣的可以下载学习
  • leetcode_试题集锦

    2019-09-09 06:33:02
    485_尝试 原本想利用 reduce 函数来完成自定义的加法, 但是reduce 函数只能返回一个值 nums_filter=filter(lambda i:1&i,nums) for i,j in zip(nums,nums_filter), 但你无法在函数体中改变j的值 ...
  • leetcode代码题
  • LeetCode试题总结:广度优先搜索(BFS)二叉树的堂兄弟节点试题链接解题思路代码森林中的兔子试题链接:二叉树的层序遍历 II二叉树的锯齿形层序遍历 说明:本文仅做为本人总结算法竞赛试题的笔记,参照许多了...
  • Leetcode: Triangle

    千次阅读 2015-06-07 11:37:32
    换个环境,做做Leetcode试题! 题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below. For example, g
  • 两数相加( Add Two Numbers) 题目描述 中文描述 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加...
  • 来源:https://leetcode.com/problems/longest-substring-without-repeating-characters/discuss/1737/C%2B%2B-code-in-9-lines. 个人加英文注释版: class Solution { public : int ...
  • 两数之和 难度 简单 题目描述 给定一个整数数... } 复杂度分析 时间复杂度:O(n) 空间复杂度:O(n) 方法对比 使用leetcode测试的数据可以很明显看出两种方式的差异 方法 执行时间 内存消耗 1 52ms 40.3MB 2 4ms 39.9MB

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 442
精华内容 176
关键字:

leetcode试题