
算法练习
平时的一些算法练习
陆源东
这个作者很懒,什么都没留下…
展开
-
No.25 K个一组反转链表
25. K个一组反转链表 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next =原创 2021-09-18 00:18:24 · 174 阅读 · 0 评论 -
剑指 Offer 59 - I. 滑动窗口的最大值
剑指 Offer 59 - I. 滑动窗口的最大值 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7原创 2021-05-20 22:02:05 · 89 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串
剑指 Offer 58 - II. 左旋转字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例 1: 输入: s = “abcdefg”, k = 2 输出: “cdefgab” 示例 2: 输入: s = “lrloseumgh”, k = 6 输出: “umghlrlose” 限制: 1 <= k < s.length <=原创 2021-05-14 22:29:03 · 96 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 示例 1: 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]] 示例 2: 输入:head = [[1,1],[2,1]] 输出:[[1,1],[2,1原创 2021-05-14 22:28:16 · 78 阅读 · 1 评论 -
剑指 Offer 30. 包含 min 函数的栈
剑指 Offer 30. 包含 min 函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top原创 2021-05-14 22:27:27 · 96 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串
剑指 Offer 20. 表示数值的字符串 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者 整数 (可选)一个 'e' 或 'E' ,后面跟着一个 整数 若干空格 小数(按顺序)可以分成以下几个部分: (可选)一个符号字符('+' 或 '-') 下述格式之一: 至少一位数字,后面跟着一个点 '.' 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字 一个点 '.' ,后面跟着至少一位数字原创 2021-05-14 22:26:38 · 69 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3,-1] 示例 2: 输入: [“CQueue”,“delete原创 2021-05-08 22:17:56 · 64 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 有以下两种方法 翻转链表,然后遍历链表加入到数组当中。 //迭代的方式把链表翻转 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ clas原创 2021-05-08 09:48:55 · 81 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 有两种方法 : 使用Java的String内置函数replaceAll(String regex,String replacement) 直接进行替换 效率低下 class Solution { public String replaceSpace(String s) { s = s.replaceAll(" ","%20"); return s ; } }原创 2021-05-08 00:16:10 · 69 阅读 · 0 评论 -
leetcode NO.206 翻转链表
206.反转链表 1. 迭代法 迭代方法通过遍历模拟整个链表的翻转过程 N1->N2->N3->N4->N5 对于每一个节点需要 node->next 需要等于节点的前驱节点 当执行 N3->next = N2 的时候, 发现无法继续遍历到 N4(此时N3->next = N2 ) 因此需要 记录 节点 head 以及 前驱节点pre 和 后继节点 next class Solution { public ListNode reverseList(Lis原创 2021-05-06 22:24:04 · 84 阅读 · 0 评论 -
快速排序的两种实现方式
快速排序的两种实现方式 相互覆盖类 public class quickSort1 { public static void main(String args[]) { int[] array = {2,3,1,4,5,7,5,8,9,10}; quickSort(0,array.length-1,array); for(int i : array) { System.out.println(i);原创 2021-03-31 23:52:01 · 217 阅读 · 0 评论