![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法学习
文章平均质量分 86
语言只是工具,编程思维才是最重要的!
上电失败
个人学习笔记
展开
-
数据结构与算法 C++关键字 Vector
Vector函数功能1.push_back 在数组的最后添加一个数据2.pop_back 去掉数组的最后一个数据3.at 得到编号位置的数据4.begin 得到数组头的指针5.end 得到数组的最后一个单元+1的指针6.front 得到数组头的引用7.back 得到数组的最后一个单元的引用8.max_size 得到vector最大可以是多大9.capacity 当前vector分配的大小10.size 当前使用数据的大小11.resize 改变当前使用数据的大小,如果它比当前使用的大,转载 2020-10-19 11:23:23 · 841 阅读 · 0 评论 -
数据结构与算法 C++基础知识总结
函数重载与复写1.成员函数重载特征:a、相同的范围(同一个类中)b、函数名字相同c、参数不同d、virtual关键字可有可无不能被重载的运算符1、.(成员访问运算符)2、.* (成员指针访问运算符)3、:: (域运算符)4、sizeof(长度运算符)5、?: (条件运算符)重写(覆盖)是指派生类函数覆盖基类函数,特征是:a、不同的范围,分别位于基类和派生类中b、函数的名字相同c、参数相同d、基类函数必须有virtual关键字3、重定义(隐藏)是指派生类的函数屏蔽了与其同名的原创 2021-09-26 13:59:08 · 317 阅读 · 0 评论 -
数据结构与算法 约瑟夫环问题 C语言
守夜人自杀问题 琼恩雪诺带领了30个守夜人(共31人)去长城外巡视,突然被野人大军包围了,他们曾宣誓守护王国,所以决定围成一个圆圈相继自杀,琼恩雪诺是首领官,他第一个报数(编号1),每隔三人自杀(也就是第3人自杀,6,9,12…),直至所有人自杀死亡为止,但是琼恩雪诺并不想死,他打算投靠野人,他会成为最后一个自杀的人吗?思路:用数组,下标对应守夜人编号,数组值用于记录,该守夜人是否自杀,用count原创 2020-09-10 13:52:46 · 336 阅读 · 0 评论 -
数据结构与算法 迷宫夺宝 C语言
迷宫夺宝1.1 题目要求一个N x N的矩阵代表了一个迷宫,迷宫中每个房间由以下三种数字的一种来表示: 0 代表房间安全,是可以通过的。 1 代表房间中有奖励物品,玩家可以拿到奖励并通过房间。 -1 代表房间中有障碍,玩家不能通过房间。 你的任务是在遵守下列规则的情况下,尽可能多的拿到奖励:  原创 2020-09-04 15:38:42 · 490 阅读 · 0 评论 -
数据结构与算法 快速排序 C语言
快速排序 C语言 LeetCode题型:待补充#include<stdio.h>#include<stdlib.h>void swap(int *nums, int i, int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp;}int partition(int *nums, int low, int high)//分治{原创 2020-09-04 11:07:08 · 110 阅读 · 0 评论 -
Leetcode 560 和为k的连续子数组
Leetcode 560 和为k的连续子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。思路1:常规双for遍历,和为k就++int subarraySum(int* nums, int nu原创 2020-08-21 16:07:15 · 289 阅读 · 0 评论 -
LeetCode 327 区间和的个数 C语言
LeetCode 327 区间和的个数 C语言给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper。区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。说明:最直观的算法复杂度是 O(n2) ,请在此基础上优化你的算法。示例:输入: nums = [-2,5,-1], lower = -2, upper = 2,输出: 3解释: 3个区间分别是: [0,0], [2,2原创 2020-08-21 13:54:32 · 353 阅读 · 0 评论 -
Leecode 493 翻转对 C语言
求数组中逆序对个数#include<stdio.h>#include<stdlib.h>void printList(int *nums, int len) { int i; for (i = 0; i < len; i++) { printf("%d ", nums[i]); }}void merge(int *nums, int start, int mid, int end,int *count) {//治 int len=end-start+1;原创 2020-08-18 14:30:54 · 195 阅读 · 0 评论 -
数据结构与算法 归并排序 C语言
归并排序 C语言思路:分治 先分原数组左半边 再分原数组右半边,最终层层递归治实现排序;图片来自https://blog.csdn.net/baidu_15547923/article/details/89742717归并与逆序对的关系:待补充#include<stdio.h>#include<stdlib.h>#define ArrLen 20void printList(int *nums, int len) { int i; for (i = 0; i <原创 2020-08-17 19:27:35 · 113 阅读 · 0 评论 -
LeetCode 208 前缀树 C/C++语言
LeetCode 208 前缀树 C/C++语言实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.search(“app”); // 返回 falsetrie.startsWith(“app”); // 返回 truetrie.insert(“app”);原创 2020-08-16 22:24:08 · 185 阅读 · 0 评论 -
LeetCode 667 键值映射 C语言
LeetCode 667 键值映射 C语言实现一个 MapSum 类里的两个方法,insert 和 sum。对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。示例 1:输入: insert(“apple”, 3), 输出: Null输入: sum(“ap”), 输出: 3输入: insert(“app”, 2),原创 2020-08-15 23:22:02 · 262 阅读 · 0 评论 -
Leetcode 206 反转链表 C语言
Leetcode 206 反转链表 C语言反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?思路1:利用双指针,pNext始终指向下一个元素,temp用于储存pNext的下个元素1 → 2 → 3 → 4 → 5pHead pNext temp1 ← 2原创 2020-08-13 19:58:24 · 102 阅读 · 0 评论 -
Leetcode 88 合并两个有序数组 C语言
Leetcode 88 合并两个有序数组 C语言给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2原创 2020-08-10 19:38:29 · 242 阅读 · 0 评论 -
Leetcode 83 删除排序链表中的重复元素 C语言
Leetcode 83 删除排序链表中的重复元素 C语言给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3思路:遍历链表 找到相等就指向下一个 否则继续找struct ListNode* deleteDuplicates(struct ListNode* head){ if(head == NULL)原创 2020-08-10 17:56:32 · 183 阅读 · 0 评论 -
Leetcode 69 x的平方根 C语言
Leetcode 69 x的平方根 C语言实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。思路:无论是折半查找还是遍历,如果写成mid * mid <=x 当mid值很大时,会超于int报错,故拆分成mid <= x/mid ;这里原创 2020-08-07 17:47:06 · 353 阅读 · 0 评论 -
Leetcode 67 二进制求和 C语言
Leetcode 67 二进制求和 C语言给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”提示:每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。1 <= a.length, b.length <= 10^4字符串如果不是 “0” ,就都不含前导零。思路:从后往前加,判断那原创 2020-08-07 17:23:14 · 418 阅读 · 0 评论 -
Leetcode 58 最后一个单词的长度 C语言
Leetcode 58 最后一个单词的长度 C语言给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例:输入: “Hello World”输出: 5思路:从后边开始遍历;遇到空格并且count不为0的时候即可退出int lengthOfLastWord(char * s){ int len=原创 2020-08-05 18:17:18 · 229 阅读 · 0 评论 -
Leetcode 53 最大子序列 C语言
Leetcode 53 最大子序列 C语言给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解思路1:当总和大于0,代表序列和是增加的;加上当前遍历数字;当综合小于0,则代表在下降,判断前n个数字和当前数字的大小;int maxSubAr原创 2020-08-05 16:53:54 · 165 阅读 · 0 评论 -
Leetcode 66 加一 C语言
Leetcode 66 加一 C语言给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。思路1:2年前写的。。先判断如果数字都是9的话,则会产生进位;carry用于表示是否需要原创 2020-08-05 15:52:33 · 179 阅读 · 0 评论 -
Leetcode 38 外观数列 C语言
Leetcode 38 外观数列 C语言给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。注意:整数序列中的每一项将表示为一个字符串。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “一个 1 ”,记作 11描述前一项,这个数是 11 即 “两个 1 ” ,记作 21描述前一项,这个数是 21 即 “一个 2 一原创 2020-08-05 14:48:05 · 510 阅读 · 0 评论 -
Leetcode 35 搜素插入位置 C语言
Leetcode 35 搜素插入位置 C语言给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0思路1:在顺序数组中查找数字可以立马联想到二分法left=right没找到数,l原创 2020-08-05 10:40:59 · 116 阅读 · 0 评论 -
Leetcode 28 实现strStr C语言
Leetcode 28 实现strStr C语言实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1说明:当 needle 是空字符串时,我们原创 2020-08-04 19:38:49 · 159 阅读 · 0 评论 -
Leetcode 27 移除元素
Leetcode 27 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums =原创 2020-08-04 15:34:37 · 188 阅读 · 0 评论 -
Leetcode 26 删除排序数组中的多余项
Leetcode 26 删除排序数组中的多余项给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数原创 2020-08-04 14:56:46 · 118 阅读 · 0 评论 -
Leecode 21 合并两个有序链表
Leecode 21 合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路1:利用递归的方法,缩小链表长度思考l1:1->null;l2:null;(1) if(l2==NULL) return l1;l1:1->null;l2:3->null;(1) l1->v原创 2020-08-04 14:10:09 · 147 阅读 · 0 评论 -
Leecode 20 有效的括号 C语言
Leecode 20 有效的括号 C语言给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: t原创 2020-08-04 10:48:04 · 132 阅读 · 0 评论 -
Leetcode 14 最长公共前缀 C语言
Leetcode 14 最长公共前缀 C语言编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。思路:(1)注意是公共前缀 前缀(2)接着就采用横向扫描的,以第一个字符串为基准,分别进行比较,遇到不相等就插入结束符,最后返原创 2020-08-04 10:13:15 · 382 阅读 · 0 评论 -
Leetcode 13 罗马数字转整数 C语言
Leetcode 13 罗马数字转整数 C语言罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVI原创 2020-08-03 19:29:50 · 195 阅读 · 0 评论 -
Leetcode 9 回文数 C语言
Leetcode 9 回文数 C语言判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这个问题吗?bool isPalindrome(in原创 2020-08-03 19:10:12 · 89 阅读 · 0 评论 -
Leetcode 7 整数反转 C语言
Leetcode 7 整数反转 C语言给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。[-2^31]原=100000…0000[-2^31]反=111111…1111 (除符号位,其余取反原创 2020-08-03 17:17:02 · 204 阅读 · 0 评论 -
Leetcode 415 字符串相加 C语言
Leetcode 415 字符串相加 C语言给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。(难度简单)注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。char* addStrings(char* num1, char* num2) {int len1=strlen(num1);int len2原创 2020-08-03 16:45:09 · 587 阅读 · 1 评论