- 博客(18)
- 收藏
- 关注
原创 【链表】#剑指 Offer 03 数组中重复的数字
数组中重复的数字1,题目2,代码1,题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 :输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 1000002,代码// 排序int cmp(const void* a, const void* b) { return
2022-02-17 17:16:45 202
原创 【链表】#剑指 Offer II 027 回文链表
回文链表1,题目2,代码1,题目给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。示例 1:输入: head = [1,2,3,3,2,1]输出: true提示:链表 L 的长度范围为 [1, 100000]0 <= node.val <= 92,代码/** * Definition for singly-linked list. * struct ListNode { * in
2022-02-16 16:57:44 397
原创 【链表】# 剑指offer24 反转链表
反转链表1,题目2,代码1,题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL2,代码题解题目要反转链表,可以通过迭代(双指针)和递归来做,这里的双指针不是用于判断链表是否有环的快慢指针,而是普通的双指针。方法一:迭代(双指针)具体操作分别定义两个均指向空的指针 (pre/next);next 用于
2022-02-15 11:04:31 713
原创 【链表】# 剑指offer06 从尾到头打印链表
从尾到头打印链表1,题目2,代码1,题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。输入:head = [1,3,2]输出:[2,3,1]2,代码//栈/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; *//** * Note: The returned array must be
2022-02-14 15:24:33 481
原创 【链表】#203 移除链表元素
移除链表元素1,题目2,代码1,题目给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]2,代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next;
2022-02-12 16:17:03 368
原创 【链表】#83 删除排序链表中的重复元素
删除排序链表中的重复元素1,题目2,代码1,题目给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。2,代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* deleteDuplicates(struct ListNode
2022-02-12 15:14:22 206
原创 【链表】#21 合并两个有序链表
合并两个有序链表1,题目2,代码1,题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。2,代码//递归struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { if (l1 == NULL) { return l2; } else if (l2 == NULL) { retu
2022-02-12 14:56:40 236
原创 【数组】#414 第三大的数
第三大的数1,题目2,代码1,题目给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。2,代码快速降排法int cmp(const void *a, const void *b){ //降序排序 return *(int*)a < *(int*)b;}int thirdMax(int* nums, int numsSize){ qsort(nums, numsSize, sizeof(int), cmp); int count = 1; for (i
2022-02-10 10:51:52 372
原创 【数组】#122 买卖股票的好时机 2
买卖股票的好时机 21,题目2,代码1,题目给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
2022-01-13 10:54:03 86
原创 【数组】#121 买卖股票的好时机
买卖股票的好时机1,题目2,代码1,题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 =
2022-01-12 17:02:28 69
原创 【数组】#88 合并两个有序数组
合并两个有序数组1,题目2,代码1,题目给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。输入:n
2022-01-12 16:23:43 85
原创 【数组】#66 加一
加一1,题目2,代码1,题目给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。输入:digits = [0]输出:[1]2,代码遍历int* plusOne(int* digits, int digitsSize, int* returnSize) { f
2022-01-12 15:27:57 352
原创 【数组】#53 最大子数组和
最大子数组和1,题目2,代码1,题目给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。输入:nums = [1]输出:12,代码动态规划int maxSubArray(int* nums, int numsSize) { int pre = 0, max
2022-01-12 14:42:56 201
原创 【数组】#35 搜索插入位置
搜索插入位置1,题目2,代码1,题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。输入: nums = [1,3,5,6], target = 5输出: 2输入: nums = [1,3,5,6], target = 0输出: 0输入: nums = [1,3,5,6], target = 7输出: 42,代码二分法int searchInsert(int*
2022-01-12 14:03:20 158
原创 【数组】#27 移除元素
移除元素1,题目2,代码1,题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如
2022-01-12 11:13:22 97
原创 【数组】#26 删除有序数组中的重复项
删除有序数组中的重复项1,题目2,代码1,题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。2,代码**双指针**int removeDuplicates(int* nums, int numsSize){ int j = numsSize; if (j > 1){ j = 1; for (int i = 1; i &
2022-01-12 10:52:29 111
原创 【数组】#1 两数之和
两数之和1,题目2,代码1,题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。2,代码**暴力枚举法** /** *
2022-01-12 10:08:33 100
转载 Python 多个图同时在不同窗口显示
Python的matplotlib包可以轻松的将数据可视化,想同时在两个窗口展示两张图,但是代码运行结果总是显示一张图,把当前的图删掉之后才能显示另一张图。网上找了一些解决方案都是把它们放在一个窗口中,两个图片分别为子图。经过一段摸索,博主终于解决了这个问题,下面简单介绍一下。如下代码所示,首先要为每个图建立一个figure,这样每个图会单独显示在一个窗口中;然后等所有图代码都写好后在最后面加...
2019-05-16 09:43:07 7666
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人