自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(165)
  • 收藏
  • 关注

原创 561. 数组拆分 I

给定长度为2n的整数数组 nums ,你的任务是将这些数分成n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到n 的 min(ai, bi) 总和最大。 返回该 最大总和 。 来源:力扣(LeetCode) 快速排序 int cmp(int *a, int *b) { return *a - *b; } int arrayPairSum(int* nums, int numsSize) { int sum ...

2021-09-24 06:52:56 77

原创 14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串""。 来源:力扣(LeetCode) 两重循环 // 此为最大字符串长度 #define MAXLENGTH 201 char * longestCommonPrefix(char ** strs, int strsSize) { int length = strlen (strs[0]); if (length == 0) { return strs..

2021-09-23 22:37:11 69

原创 498. 对角线遍历

给你一个大小为m x n的矩阵mat,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。 示例 1: 来源:力扣(LeetCode) 模拟 我们发现, 当下标和为偶数时, 向右上; 奇数时, 向左下 /** * Note: The returned array must be malloced, assume caller calls free(). */ int * findDiagonalOrder(int** mat, int matSize, in...

2021-09-23 21:43:28 131

原创 面试题 01.08. 零矩阵

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。 0 1 2 0 3 4 5 2 1 3 1 5 0 0 0 0 0 4 5 0 0 3 1 0 来源:力扣(LeetCode) 辅助数组 void setZeroes(int** matrix, int matrixSize, int* matrixColSize) { // 用 .

2021-09-23 11:18:02 119

原创 48. 旋转图像

给你一幅由N × N矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 来源:力扣(LeetCode) 辅助数组 void rotate(int** matrix, int matrixSize, int* matrixColSize) { // 用 row, column , 表示矩阵的行,列 int matrixRow = matrixSize; int matrixColumn = matrixSize; // ...

2021-09-23 06:34:16 77

原创 725. 分隔链表

给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。 每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。 这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。 返回一个符合上述规则的链表的列表。 来源:力扣(LeetCode) 由题可知, 最大部分和其余部分差值为1 那应该有多少链表元素为最大长度? 由例题 元素个数为 10, k的值为3, 链表最长的个...

2021-09-22 07:12:35 88

原创 11. 盛最多水的容器

给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。 来源:力扣(LeetCode) 双指针 // 返回最高挡板高度 int maxHeight(int a, int b) { return a > b ? b : a; } int maxArea(int* height...

2021-09-21 14:46:08 71

原创 345. 反转字符串中的元音字母

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。 元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现。 来源:力扣(LeetCode) 双指针 // 判断是个否为元音字母的函数 isvowel bool isvowel(char ch) { char vowel[5] = {'A', 'E', 'I', 'O', 'U'}; for (int i = 0; i < 5; i ++) { ..

2021-09-21 14:11:07 197

原创 58. 最后一个单词的长度

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 来源:力扣(LeetCode) 反向遍历 int lengthOfLastWord(char * s) { int length = strlen (s); int ans = 0; for (int i = length - 1; i >= 0; i --) { // 跳过字符串尾空.

2021-09-21 06:54:32 52

原创 387. 字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 来源:力扣(LeetCode) 队列 + 哈希表 struct hashTable { int key; int val; UT_hash_handle hh; }; int firstUniqChar(char * s) { struct hashTable *position = NULL; int queue[26][2]; int righ.

2021-09-18 18:48:41 111

原创 292. Nim 游戏

你和你的朋友,两个人一起玩Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合,你作为先手。 每一回合,轮到的人拿掉1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。 来源:力扣(LeetCode) 假设石头堆中只有一块、两块、三块石头,那么在第一回合,你就可以把全部石子拿走 如果堆中恰好有四块石头,你就会失败。 继续向后尝..

2021-09-18 12:00:26 73

原创 82. 删除排序链表中的重复元素 II

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。 返回同样按升序排列的结果链表。 来源:力扣(LeetCode) 一次遍历 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode*...

2021-09-17 13:45:58 72

原创 142. 环形链表 II

给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 来源:力扣(LeetCode) 双指针 /** * Definition for singly-linked list. * struct ListNode { * int val; *..

2021-09-17 13:16:39 57

原创 面试题 02.02. 返回倒数第 k 个节点

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 来源:力扣(LeetCode) 暴力遍历 第一次遍历记录链表元素个数 第二次查找所在位置 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ int kthToLast(struct ListNode* head, int k) ..

2021-09-17 13:10:05 98

原创 剑指 Offer 25. 合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 来源:力扣(LeetCode) 完全一致21. 合并两个有序链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* mergeTwoLists(struct ListNode* l1, s.

2021-09-17 13:04:57 90

原创 剑指 Offer 06. 从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 来源:力扣(LeetCode) 206. 反转链表 类似的 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * Note: The returned array must be malloced, assume cal.

2021-09-16 13:14:09 75

原创 234. 回文链表

给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。 来源:力扣(LeetCode) 申请额外数组 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ bool isPalindrome(struct ListNode* h...

2021-09-16 13:00:20 74

原创 1290. 二进制链表转整数

给你一个单链表的引用结点head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 来源:力扣(LeetCode) /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ int getDecimalValue(struct Lis.

2021-09-16 12:51:51 78

原创 206. 反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 来源:力扣(LeetCode) 在遍历链表时,将当前节点 (cur)的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点 (pre)。在更改引用之前,还需要存储后一个节点 (next)。最后返回新的头引用 /** * Definition for singly-linked list. * struct ListNode { * int val; * str

2021-09-16 12:49:55 84

原创 160. 相交链表

给你两个单链表的头节点headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 题目数据 保证 整个链式结构中不存在环。 来源:力扣(LeetCode) 双指针 我们假设两个链表相交 链表 A 和 B 的长度分别是 m 和 n。假设链表 \A 的不相交部分有 a 个节点,链表 B 的不相交部分有 b个节点,两个链表相交的部分有 c 个节点,则有 a+c=m,b+c=n。 如果 a=b,则两个指针会同时到达两个链表相交的节点,...

2021-09-16 12:38:04 69

原创 141. 环形链表

给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? 来源:力扣(LeetCode) 双指.

2021-09-16 12:27:21 67

原创 面试题 02.03. 删除中间节点

若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。 假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。 来源:力扣(LeetCode) 237. 删除链表中的节点 完全一致 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ void deleteNo..

2021-09-16 12:24:31 84

原创 面试题 02.01. 移除重复节点

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 来源:力扣(LeetCode) 双指针 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* removeDuplicateNodes(struct ListNode* head) { struct.

2021-09-16 12:21:30 69

原创 剑指 Offer 18. 删除链表的节点

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 注意:此题对比原题有改动 来源:力扣(LeetCode) /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* deleteNode(struct ListNode* hea

2021-09-16 12:15:32 100

原创 203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 来源:力扣(LeetCode) 感觉移除链表都相似 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* removeEle.

2021-09-16 11:55:28 81

原创 237. 删除链表中的节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。 来源:力扣(LeetCode) 因为无法读入头节点, 所以直接改写要删除的节点, 实际是绕开该节点 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ void deleteNode(struct ..

2021-09-15 22:37:55 77

原创 83. 删除排序链表中的重复元素

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。 返回同样按升序排列的结果链表。 来源:力扣(LeetCode) 暴力遍历 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* deleteDuplica

2021-09-15 22:05:29 57

原创 740. 删除并获得点数

给你一个整数数组nums,你可以对它进行一些操作。 每次操作中,选择任意一个nums[i],删除它并获得nums[i]的点数。之后,你必须删除 所有 等于nums[i] - 1 和 nums[i] + 1的元素。 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。 来源:力扣(LeetCode) 动态规划 由题可知:当你选了一个数 x ,那么 x - 1 和 x + 1, 则不做选择 例如 ;nums = [1, 1, 2, 2, 2, 3, 3, 3, 3, ...

2021-09-14 22:35:26 94

原创 678. 有效的括号字符串

给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 1.任何左括号 (必须有相应的右括号 )。 2.任何右括号 )必须有相应的左括号 (。 3.左括号 ( 必须在对应的右括号之前 )。 4.*可以被视为单个右括号 ),或单个左括号 (,或一个空字符串。 5.一个空字符串也被视为有效字符串。 来源:力扣(LeetCode) 贪心算法 bool checkValidString(char * s) { i...

2021-09-12 08:32:28 311

原创 300. 最长递增子序列

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 来源:力扣(LeetCode) 动态规划 int lengthOfLIS(int* nums, int numsSize) { int *dp = (int *)malloc (sizeof (int) * numsSize); int ans

2021-09-11 08:43:53 78

原创 213. 打家劫舍 II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。 来源:力扣(LeetCode) 动态规划 因为首尾不相容 所以拆分为两个 1. Index (0 -> numsSize - 2) .

2021-09-10 23:38:44 63

原创 198. 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 来源:力扣(LeetCode)。 动态规划 int rob(int* nums, int numsSize) { if (numsSize == 1) {

2021-09-10 18:46:31 76

原创 121. 买卖股票的最佳时机

给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 来源:力扣(LeetCode) 双指针 int maxProfit(int* prices, int pricesSize) { int maxProfit = 0; ...

2021-09-10 18:01:42 375

原创 392. 判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 进阶: 如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码? 来源:力扣(LeetCode) 双指针 bool isSubsequence(char.

2021-09-10 17:48:24 82

原创 1894. 找到需要补充粉笔的学生编号

一个班级里有n个学生,编号为 0到 n - 1。每个学生会依次回答问题,编号为 0的学生先回答,然后是编号为 1的学生,以此类推,直到编号为 n - 1的学生,然后老师会重复这个过程,重新从编号为 0的学生开始回答问题。 给你一个长度为 n且下标从 0开始的整数数组chalk和一个整数k。一开始粉笔盒里总共有k支粉笔。当编号为i的学生回答问题时,他会消耗 chalk[i]支粉笔。如果剩余粉笔数量 严格小于chalk[i],那么学生 i需要 补充粉笔。 请你返...

2021-09-10 17:38:21 96

原创 746. 使用最小花费爬楼梯

数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。 每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。 请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。 来源:力扣(LeetCode) 动态规划 与 70. 爬楼梯类似 踏上第i级台阶有两种方法: 先踏上第i-1级台阶(最小总花费dp[i - 1]),再迈一步踏上第i级台阶..

2021-09-09 21:10:08 117

原创 70. 爬楼梯

假设你正在爬楼梯。需要n阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定n是一个正整数。 来源:力扣(LeetCode) 动态规划 / 斐波那契数列 第一级台阶: 爬一级台阶= P0 -> P1(1种方法) 第二级台阶: 爬一级台阶 =P1 -> P2 爬两级台阶 = P0 -> P2 (2种方法) 第三级台阶: 爬一级台阶=P2 -> P...

2021-09-09 20:49:05 56

原创 剑指 Offer 04. 二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 来源:力扣(LeetCode) 暴力法 bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target) { for (int row; row < matrixSize;.

2021-09-07 11:39:54 160

原创 53. 最大子序和

给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 来源:力扣(LeetCode) 贪心算法 int maxSubArray(int* nums, int numsSize) { int ans = -100000; // -100000为理论上数组最小值 int sum = 0; for (int i = 0; i < numsSize; i ++) { sum += nums.

2021-09-07 08:39:06 94

原创 1221. 分割平衡字符串

在一个 平衡字符串 中,'L' 和 'R' 字符的数量是相同的。 给你一个平衡字符串s,请你将它分割成尽可能多的平衡字符串。 注意:分割得到的每个字符串都必须是平衡字符串。 返回可以通过分割得到的平衡字符串的 最大数量 。 来源:力扣(LeetCode) 贪心算法 int balancedStringSplit(char * s) { int len = strlen (s); int ans = 0; int count = 0; // count ..

2021-09-07 07:52:51 95

空空如也

空空如也

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

TA关注的人

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