自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(182)
  • 资源 (1)
  • 收藏
  • 关注

原创 hot100-链表相关

本质就是递归归并,不断排序两个链表,其中可以参考21. 合并两个有序链表。

2024-04-07 15:50:36 138

原创 路径问题总结

关键点 targetsum只能改成long 不然会越界。

2024-03-25 14:10:17 275

原创 记录一下 malloc 是如何分配内存的

在这 6 个内存段中,堆和文件映射段的内存是动态分配的。比如说,使用 C 标准库的 malloc() 或者 mmap() ,就可以分别在堆和文件映射段动态分配内存。

2023-09-26 22:05:10 194

原创 leetcode_哈希表相关题目

242. 有效的字母异位词class Solution { public boolean isAnagram(String s, String t) { //用数组做哈希表 int[] count = new int[26]; for(char c : s.toCharArray()) count[c-'a']++; for(char d : t.toCharArray()) count

2022-01-18 21:10:33 327

原创 Leetcode_移除元素及其相关类似题目

leetcode_移除元素 (JAVA)

2022-01-05 21:15:25 235

原创 Leetcode_二叉树递归问题自我总结

Java 一些二叉树递归问题的自我总结

2022-01-01 17:33:42 3810

原创 leetcode_二叉树遍历总结_Java版

假期了继续刷刷leetcode吧!前序,中序,后序递归实现class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<Integer>(); preorder(root,ans); return ans; } public void preor

2021-12-30 22:11:56 496

原创 数据结构leetcode——day3

350. 两个数组的交集 II思路:双指针+排序 有序过后 利用双指针同步比较,不同则较小的往前走继续比较,相同就写入数组,两指针同时走比较下一位(记录下qsort中cmp函数,int cmp(const void *a, const void *b)返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要放第二个前面, 如果是 0, 那就无所谓谁前谁后.所以更具体的也可以这么写int cmp(const void* _a, const void* _b) {

2021-07-28 23:37:24 122

原创 数据结构leetcode——day2

1. 两数之和方法一:暴力求解/** * Note: The returned array must be malloced, assume caller calls free(). */int* twoSum(int* nums, int numsSize, int target, int* returnSize){ for(int i=0; i<numsSize-1;i++) { for(int j=i+1;j<numsSize;j++)

2021-07-27 13:43:01 84

原创 数据结构leetcode——day1

217. 存在重复元素题目即寻找有无重复元素,有就返回true 没有返回false思路一:直接排序 然后查找相邻元素是否相同int cmp(const void* a, const void* b) { return *(int*)a - *(int*)b;}bool containsDuplicate(int* nums, int numsSize) { qsort(nums, numsSize, sizeof(int), cmp); for (int i = 0;

2021-07-26 14:27:07 113

原创 338. 比特位计数

338. 比特位计数通过x&(x-1)运算 将x 的二进制表示的最后一个 1 变成 0。因此,对 x 重复该操作,直到 x 变成 0,则操作次数即为 x 的“一比特数”比如1&0=011&10=10 10&01=00相当于奇数最后一位是1,偶数最后一位是0 二者相与就能把最后一个1变成0不断相与直至没有1就能得到1的个数class Solution {public: int countOnes(int x) { int cou

2021-03-04 18:20:26 73

原创 前缀和——303. 区域和检索 - 数组不可变&&304. 二维区域和检索 - 矩阵不可变

303. 区域和检索 - 数组不可变前缀和,用数组存取前缀和 从而每次查找时间复杂度为O(1)/** * Your NumArray object will be instantiated and called as such: * NumArray* obj = new NumArray(nums); * int param_1 = obj->sumRange(i,j); */class NumArray {public: vector<int> sums;

2021-03-02 15:23:21 84

原创 归并排序 c语言实现

归并排序归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法算法复杂度:O(nlogn)就是将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。递归实现/* 归并排序 - 递归实现 */#include <stdio.h>#include<stdlib.h> #define ElementType int/* L = 左边起始位置, R = 右边起始位置,

2021-01-11 23:42:53 848

原创 用c语言手写堆排序以及来道简单题吧 1046. 最后一块石头的重量

堆排序手写一遍吧#include<stdio.h>#include<stdlib.h>void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp; } void HeapAdjust(int *heap,int i,int size){ int lchild=2*i+1;//左孩子序号 int rchild=2*i+2;//右孩子序号 int temp =i; if(i<=size/2-1) {

2020-12-30 23:53:05 2142 4

原创 Leetcode_148. 排序链表以及归并排序的复习

148. 排序链表给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?题目要求时间空间复杂度分别为O(nlogn)和O(1),根据时间复杂度我们自然想到二分法,从而联想到归并排序首先先复习一下归并排序就是利用归并的思想实现的排序方法,假设初始记录含有n个记录,则可以看成n个有序的子序列,每个子序列长度为1,然后两两归并,得到不小于[n/2]的最小整数个长度为2或1的有序子序列,再两两归并…

2020-11-21 22:59:52 121

原创 Leetcode_206. 反转链表&&876. 链表的中间结点&&143. 重排链表

206. 反转链表递归方法class Solution { public ListNode reverseList(ListNode head) { //递归终止条件是当前为空,或者下一个节点为空 if(head==null || head.next==null) { return head; } //这里的cur就是最后一个节点 ListNode cur = reverseList(head.next); //如果链表是 1->2->3->4-&gt

2020-10-20 15:12:14 101

原创 深度优先搜索 leetcode二叉树路径问题

257. 二叉树的所有路径/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public List<String> binaryTreePaths(Tre

2020-10-17 22:13:59 168

原创 Leetcode_环形链表I&&环形链表II

141. 环形链表思路:快慢双指针,快指针一次两步,慢指针一次一步,如果存在环,两指针必定相遇,相当于追及问题/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */class Sol

2020-10-11 14:51:58 76

原创 15. 三数之和&&18. 四数之和

15. 三数之和思路:指针+排序class Solution { public static List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> ans = new ArrayList(); int len = nums.length; if(nums == null || len < 3) return ans;

2020-10-08 00:14:11 1213

原创 107. 二叉树的层次遍历 II

107. 二叉树的层次遍历 II给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],返回其自底向上的层次遍历为:思路:同正常的层序遍历相比,只需要加每次插入队尾变成每次插入队头即可,即可实现从底向上层序遍历/** * Definition for a binary tree node. * public class TreeNode { * int val;

2020-10-02 23:55:11 77

原创 102. 二叉树的层序遍历(Leetcode)

102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],返回其层序遍历结果思路:BFS(广度优先搜索),再考虑到输出格式,采用二维数组ans存储每一层的数组,同时为了保证将同一层的值写进level里,利用for循环,将确保每一层的全部输出,在 while 循环的每一轮中,都是将当前层的所有结点出队列,再将下一层的所有结点入队列,这样就实现了层序遍历。/** * Defin

2020-09-26 11:34:25 121

原创 二叉树的最大深度和最小深度

111. 二叉树的最小深度给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。思路 :深度优先搜索以及递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val =

2020-08-21 21:47:10 272

原创 单调栈解法——496. 下一个更大元素 I&&503. 下一个更大元素 II(Leetcode)

496. 下一个更大元素 I给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释:对于num1中的数字4,你无法在第二个数

2020-08-12 00:32:47 95

原创 二叉树的前序,中序,后序遍历(递归以及迭代方法总结)(Leetcode)

144. 二叉树的前序遍历递归版本4/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void Traver

2020-08-11 00:09:45 228 1

原创 用栈实现队列&&用队列实现栈(Leetcode)

用栈实现队列栈是一种 后进先出(last in - first out, LIFO)的数据结构,栈中元素从栈顶(top)压入(push),也从栈顶弹出(pop)。为了满足队列的 FIFO 的特性,我们需要用到两个栈,用它们其中一个来反转元素的入队顺序,用另一个来存储元素的最终顺序。class MyQueue {public: /** Initialize your data structure here. */ stack <int> a; stack <i

2020-08-08 16:27:16 195

原创 堆排序之 215.数组中的第K个最大元素

堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一

2020-08-07 23:28:12 324

原创 动态规划——62. 不同路径&&不同路径II

62. 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -> 向右 -> 向右示例 2:输入: m = 7

2020-08-06 17:50:59 387

原创 Leetcode_打家劫舍三道题(动态规划总结)

198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入

2020-08-05 22:52:08 214

原创 Leetcode_207. 课程表(关于拓补排序)

207. 课程表你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入: 2, [[1,0],[0,1]]输出:

2020-08-05 00:01:45 118

原创 娱乐题——292. Nim 游戏(关于巴什博弈)

292. Nim 游戏你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。知识点:巴什博弈巴什博弈:只有一堆n个物品,两个人轮流从这

2020-08-03 22:22:38 442

原创 贪心算法刷题——134. 加油站

134. 加油站在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入:gas = [1,2,3,4,5]cost = [3,4,5,

2020-08-03 14:58:28 158

原创 贪心算法刷题——55. 跳跃游戏&& 45. 跳跃游戏 II

55. 跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。cl

2020-08-02 23:12:53 165

原创 滑动窗口刷题——978. 最长湍流子数组

978. 最长湍流子数组当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。

2020-08-02 00:02:42 103

原创 滑动窗口刷题——1052. 爱生气的书店老板

1052. 爱生气的书店老板今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。请你返回这一天

2020-08-01 22:16:48 95

原创 滑动窗口刷题——567. 字符串的排列

567. 字符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例2:输入: s1= “ab” s2 = “eidboaoo”输出: False注意:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间思路:通过建立对应字母的26位数

2020-08-01 17:59:58 157

原创 sliding window滑动窗口刷题——剑指 Offer 59 - I. 滑动窗口的最大值

剑指 Offer 59 - I. 滑动窗口的最大值给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:提示:你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。注意:本题与主站 239 题相同:https://leetcode-cn.com/problems/sliding-window-maximum/思路1:暴力解法(两层循环来滑动窗口,每次滑动窗口都判断一下最大值)vector<int> maxSlidingW

2020-08-01 15:16:23 122

原创 贪心算法刷题——122. 买卖股票的最佳时机 II(leetcode)

122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候

2020-07-31 20:06:17 195

原创 Leetcode_350. 两个数组的交集 II

350. 两个数组的交集 II给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,

2020-07-31 00:13:03 119

原创 Leetcode_349. 两个数组的交集

349. 两个数组的交集给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。思路:直接使用set_intersection函数求交集set_intersection要求两个区间必须是有序的(从小到大排列)函数源码tem

2020-07-30 17:36:43 92

原创 Leetcode_判断子序列

392. 判断子序列给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:s = “abc”, t = “ahbgdc”返回 true.示例 2:s = “axc”,

2020-07-27 21:53:41 94

c语言图书管理系统.zip

c语言图书管理系统 分为管理员入口和学生入口,包含借书,还书,添加书,删除书等一系列基本操作,并且拥有管理员修改图书信息,查看图书状态等进一步操作,并包含友好的欢迎界面

2020-05-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除