- 博客(20)
- 收藏
- 关注
原创 知网爬取数据
进行模拟爬取知网运行selenium进行模拟登录,后进行爬取数据from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byfrom urllib.parse import u
2020-09-16 21:16:06
838
原创 剑指 Offer 31:栈的压入、弹出序列
栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3
2020-09-12 19:04:12
132
原创 剑指 Offer 42:连续子数组的最大和
连续子数组的最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。class Solution { public int maxSubArray(int[] nums) { int [] dp = new int [nums.length]; dp
2020-09-12 18:33:01
100
原创 剑指 Offer 30:包含min函数的栈
包含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(); -->
2020-09-12 17:53:54
113
原创 剑指 Offer 24:反转链表
反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {
2020-09-12 16:26:26
95
原创 剑指 Offer 18:删除链表的节点
删除链表的节点给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为
2020-09-12 13:21:39
209
原创 剑指 Offer 22:链表中倒数第k个节点
链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.# Definition for singly-linked list.# class ListNode(object):#
2020-09-10 22:34:27
107
原创 剑指 Offer 21:调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。class Solution { public int[] exchange(int[] nums) { int left = 0; int right = nums.length - 1;
2020-09-10 22:17:52
71
原创 剑指 Offer 28:对称的二叉树
对称的二叉树请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false/** * Definition for a binary tree node. * public class TreeNode { * int val;
2020-09-09 22:41:15
186
原创 剑指 Offer 27:叉树的镜像
叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]BFS解决public static void treeBFS(TreeNode root) { //如果为空直接返回 if (root == null) return; //队列 Queue<TreeNode> queue = new LinkedList<>
2020-09-09 19:49:57
101
原创 剑指 Offer 25:合并两个排序的链表
合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next =
2020-09-09 18:14:22
88
原创 剑指 Offer 07:重建二叉树
重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:思路是这样的:1:根据前序遍历来确定每次根节点的位置,因为前序遍历先访问的是根节点,所以前序遍历第一个位置就是根节点。 2:根据根节点和中序遍历将树划分为左右两棵树。3:根据第一步和第二步递归的处理左右两棵树。第一步:根据前序遍历
2020-09-08 21:23:39
82
原创 剑指 Offer 06:从尾到头打印链表
从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]class Solution { public int[] reversePrint(ListNode head) { ListNode curNode = head; int len = 0; while (curNode != null){ len ++;
2020-09-08 11:04:08
83
原创 剑指 Offer 05:替换空格
替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”int 用 ==char型数据用用单引号起来比较double用String用equalsclass Solution { public String replaceSpace(String s) { StringBuilder sb = new StringBuilder(); fo
2020-09-08 10:29:04
103
原创 剑指 Offer 11.:旋转数组的最小数字
旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0二分查找的思想把整个数组看成: 左递增数组 + 右递增数组实际上试求右递增数组的第一个元素. 所以我们里层的判断条件是判断nums[mid]和nums[end]
2020-09-08 00:13:35
69
原创 剑指 Offer 03: 数组中重复的数字
数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3方法一: 先排序,然后看相邻元素是否有相同的,有直接return。 不过很慢,时间O(nlogn)了,空间O(1) def findRepeatNumber(nums): n
2020-09-07 22:16:13
127
原创 剑指 Offer 09.:用两个栈实现队列
用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“append
2020-09-07 19:23:20
175
原创 千位分隔数
千位分隔数示例 1:输入:n = 987输出:“987”示例 2:输入:n = 1234输出:“1.234”示例 3:输入:n = 123456789输出:“123.456.789”示例 4:输入:n = 0输出:“0”从后向前遍历,如果3各的话就分1组,加上“." def thousandSeparator(n): """ :type n: int :rtype: str """ if n
2020-09-07 18:36:13
301
原创 剑指 Offer40:最小的k个数
最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]import heapq #建立一个小顶堆def getLeastNumbers(nums,k)
2020-09-06 22:28:32
162
原创 剑指 Offer 04:搜索二维矩阵 II
搜索二维矩阵 II编写一个高效的算法来搜索 n x m 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 ta
2020-09-06 22:06:55
154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人