
算法练习题入门
leetcode刷题,先刷简单的题目
_索伦
结束,还是开始?
展开
-
LeetCode 283.移动零——简单
目录题目示例C语言代码题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例输入: [0,1,0,3,12]输出: [1,3,12,0,0]C语言代码因为要保证非零元素的相对顺序,所以我选择遇到非零元素就像前覆盖,并统计零的个数,之后再把统计的零的个数, 把数组后几位置为零。void moveZeroes(int* nums, int numsSize){ int count = 0; int n = -1; for原创 2021-09-18 19:35:03 · 169 阅读 · 1 评论 -
LeetCode 977. 有序数组的平方——简单
目录题目示例代码实现(C语言)题目给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例示例1输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,原创 2021-09-18 19:25:07 · 196 阅读 · 0 评论 -
LeetCode 209. 长度最小的子数组
目录题目示例代码实现(C语言)题目给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例示例1输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例2输入:target = 4, nums = [1,原创 2021-09-18 19:18:35 · 143 阅读 · 0 评论 -
LeetCode 303.区域和检索 - 数组不可变
目录题目示例C语言代码框架C语言代码实现题目给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[ ] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], ... , nums[j]))来源:力扣原创 2021-09-09 22:03:33 · 127 阅读 · 0 评论 -
LeetCode 724.寻找数组的中心下标 //剑指Offer || 012.左右两端子数组的和相等
目录题目示例解题思路C语言代码题目给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/fin原创 2021-09-09 21:40:17 · 161 阅读 · 0 评论 -
LeetCode 1385.两数组间的距离值
目录题目示例解题思路C语言代码题目给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-the-distance-value-between-two-arrays示例输入:ar原创 2021-09-06 16:10:50 · 173 阅读 · 0 评论 -
LeetCode 1608.特殊数组的特征值
目录题目示例C语言代码题目给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。注意: x 不必 是 nums 的中的元素。如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr原创 2021-09-06 15:58:14 · 228 阅读 · 0 评论 -
LeetCode 540.有序数组中的单一元素
目录题目示例C语言代码逐个异或正常遍历题目给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2输入: nums = [3,3,7,7,10,11,11]输出: 10C语言代码逐个异或因为两个相同的数异或结果为0int singleNonDuplicate(int* nums, int numsSize){ int ans = 0; for原创 2021-09-06 11:40:16 · 378 阅读 · 0 评论 -
剑指 Offer 21.调整数组顺序使奇数位于偶数前面
目录题目示例C语言代码首尾双指针快慢指针题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。提示: 0 <= nums.length <= 50000 1 <= nums[i] <= 10000C语言代码首尾双指针 void Swap(int* a, int* b)原创 2021-09-06 11:29:44 · 121 阅读 · 0 评论 -
剑指offer 17.打印从1到最大的n位数
目录题目示例C语言代码题目输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例输入: n = 1输出: [1,2,3,4,5,6,7,8,9]C语言代码/** * Note: The returned array must be malloced, assume caller calls free(). */int* printNumbers(int n, int* returnSize){ in原创 2021-09-06 11:13:17 · 103 阅读 · 0 评论 -
LeetCode 349. 两个数组的交集
目录题目示例解题思路C语言代码题目给定两个数组,编写一个函数来计算它们的交集。难度:简单示例输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。解题思路首先,判断两数组是否为空,空直接返回第一,申请要返回的数组,首先知道,题目要求数组交集,若存在最大交集,那返回数组就是是原创 2021-09-06 10:57:57 · 186 阅读 · 0 评论 -
LeetCode 66.加一
目录题目示例解题思路C语言代码题目给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/plus-one著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表原创 2021-09-04 20:32:17 · 102 阅读 · 0 评论 -
LeetCode 27. 移除元素
目录题目说明示例C语言代码题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-element著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。说明为什么原创 2021-09-04 20:12:55 · 96 阅读 · 0 评论 -
LeetCode 217.存在重复元素
目录题目示例C语言代码题目给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。难度:简单示例输入: [1,2,3,1]输出: true输入: [1,2,3,4]输出: false输入: [1,1,1,3,3,4,3,2,4,2]输出: trueC语言代码int mycmp(const void* p1, const void* p2){ const int原创 2021-09-04 20:04:58 · 139 阅读 · 0 评论 -
LeetCode 26.删除有序数组中的重复项
目录题目示例提示解题思路C语言代码题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove原创 2021-09-03 00:17:04 · 300 阅读 · 0 评论 -
LeetCode 628.三个数的最大乘积
目录题目示例提示解题思路C语言代码题目给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例示例一输入:nums = [1,2,3]输出:6示例二输入:nums = [1,2,3,4]输出:24提示3 <= nums.length <= 104-1000 <= nums[i] <= 1000解题思路由于是找三个数的最大乘积,则有以下情况:三个正数,分别为第一大第二大第三大,相乘结果得最大值两个最小负数,与最大正数原创 2021-09-02 23:53:32 · 230 阅读 · 0 评论 -
LeetCode 121.买卖股票最佳时机 c语言
目录题目示例解题思路题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock著作权归领扣原创 2021-09-01 12:07:45 · 338 阅读 · 0 评论 -
LeetCode 414.第三大的数
目录题目示例解题思路题目给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。难度:简单示例1输入:[3, 2, 1]输出:1解释:第三大的数是 1 。2输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/thir原创 2021-09-01 11:49:00 · 199 阅读 · 0 评论 -
LeetCode153.寻找寻找旋转排序数组中的最小值
目录题目示例解题思路1:遍历解题思路2:二分法题目已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-原创 2021-09-01 11:28:03 · 176 阅读 · 0 评论 -
LeetCode 485.最大连续1的个数
目录题目示例解题思路:遍历题目给定一个二进制数组, 计算其中最大连续 1 的个数。示例输入:[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.提示:输入的数组只包含 0 和 1 。输入数组的长度是正整数,且不超过 10,000。解题思路:遍历int findMaxConsecutiveOnes(int* nums, int numsSize){ int count = 0, num = 0; for (原创 2021-09-01 10:59:49 · 86 阅读 · 0 评论 -
LeetCode1464.数组中两元素的最大乘积
目录题目示例解题思路1:遍历代码解题思路2:排序后取数组最后两个值题目给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。请你计算并返回该式的最大值。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-product-of-two-elements-in-an-array示例输入:nums = [3,4,5,2]输出:12 解释:如果选择下标 i原创 2021-09-01 10:50:01 · 202 阅读 · 0 评论 -
链表——删除链表倒数第N个结点
删除链表倒数第N个结点题目C语言解题方法快慢指针代码特殊情况因为我学的少,所以用的C语言作答题目给你一个链表,删除链表的倒数第n个结点,并返回链表的头结点C语言解题方法先画个图,假设删除倒数第2个结点:(为了便于观看,就假定结点的地址都为图中的0x…)快慢指针定义两个指针,快指针为p, 慢指针为q。都指向头结点。p先走n(这里是2)步,然后再让p和q同时走。p和q同时走,如果p走到最后一个结点,此时q就在待删除结点的前一结点。这时只需要让q->nex原创 2021-08-23 14:07:22 · 438 阅读 · 0 评论