Leetcode
吃完有点累
毕业于幼儿园,菜鸟 小白
展开
-
路径问题总结
关键点 targetsum只能改成long 不然会越界。原创 2024-03-25 14:10:17 · 282 阅读 · 0 评论 -
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 · 328 阅读 · 0 评论 -
Leetcode_移除元素及其相关类似题目
leetcode_移除元素 (JAVA)原创 2022-01-05 21:15:25 · 236 阅读 · 0 评论 -
Leetcode_二叉树递归问题自我总结
Java 一些二叉树递归问题的自我总结原创 2022-01-01 17:33:42 · 3815 阅读 · 0 评论 -
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 阅读 · 0 评论 -
数据结构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 · 124 阅读 · 0 评论 -
数据结构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 · 85 阅读 · 0 评论 -
数据结构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 · 118 阅读 · 0 评论 -
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 阅读 · 0 评论 -
前缀和——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 阅读 · 0 评论 -
用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 · 2148 阅读 · 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 阅读 · 0 评论 -
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->原创 2020-10-20 15:12:14 · 103 阅读 · 0 评论 -
深度优先搜索 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 · 169 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 1217 阅读 · 0 评论 -
102. 二叉树的层序遍历(Leetcode)
102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],返回其层序遍历结果思路:BFS(广度优先搜索),再考虑到输出格式,采用二维数组ans存储每一层的数组,同时为了保证将同一层的值写进level里,利用for循环,将确保每一层的全部输出,在 while 循环的每一轮中,都是将当前层的所有结点出队列,再将下一层的所有结点入队列,这样就实现了层序遍历。/** * Defin原创 2020-09-26 11:34:25 · 122 阅读 · 0 评论 -
二叉树的最大深度和最小深度
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 · 276 阅读 · 0 评论 -
单调栈解法——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 阅读 · 0 评论 -
二叉树的前序,中序,后序遍历(递归以及迭代方法总结)(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 · 229 阅读 · 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 · 196 阅读 · 0 评论 -
堆排序之 215.数组中的第K个最大元素
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一原创 2020-08-07 23:28:12 · 329 阅读 · 0 评论 -
动态规划——62. 不同路径&&不同路径II
62. 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -> 向右 -> 向右示例 2:输入: m = 7原创 2020-08-06 17:50:59 · 388 阅读 · 0 评论 -
Leetcode_打家劫舍三道题(动态规划总结)
198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入原创 2020-08-05 22:52:08 · 218 阅读 · 0 评论 -
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 阅读 · 0 评论 -
娱乐题——292. Nim 游戏(关于巴什博弈)
292. Nim 游戏你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。知识点:巴什博弈巴什博弈:只有一堆n个物品,两个人轮流从这原创 2020-08-03 22:22:38 · 443 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 95 阅读 · 0 评论 -
Leetcode_最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。思路:动态规划由于路径的方向只能是向下或向右,因此网格的第一行的每个元素只能从左上角元素开始向右移动到达,网格的第一列的每个元素只能从左上角元素开始向下移动到达,此时的路径是唯一的,因此每个元素对应的最小路径和即为对应的路径上原创 2020-07-23 14:14:07 · 214 阅读 · 0 评论 -
Leetcode_3. 无重复字符的最长子串
3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,原创 2020-07-22 18:16:12 · 97 阅读 · 0 评论 -
Leetcode_2.两数相加
2.两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807struct ListNode* addTwoNumbe原创 2020-07-21 23:41:44 · 59 阅读 · 0 评论 -
Leetcode__1.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。/** * Note: The returned array must be malloced, assume caller calls free(). */int* twoSum(int* nums, int numsSize, int target, int* returnSize){ int原创 2020-07-21 00:05:03 · 63 阅读 · 0 评论