自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 寻找数组的中心索引

寻找数组的中心索引,中心索引的两边元素之和相等

2022-07-08 11:39:17 370 1

原创 二叉树的序列化与反序列化

二叉树的序列化与反序列化

2022-07-08 11:27:20 245

原创 二叉树最近公共祖先

递归与非递归方式实现二叉树最近公共祖先

2022-06-24 09:59:23 2502 1

原创 填充每个节点的右侧节点指针

满二叉树填充节点的右侧节点指针

2022-06-22 10:16:41 162

原创 对称二叉树

对称二叉树的两种实现方式,递归实现,非递归实现

2022-06-18 10:02:51 905

原创 二叉树深度

二叉树深度通过自顶向下,自底向上的方式求解

2022-06-16 09:18:44 69

原创 二叉树的遍历

二叉树的遍历

2022-06-12 10:20:51 91

原创 C语言实现查找链表中间结点

如果链表有奇数个结点,就直接返回中间的结点,如果有偶数个结点,就有两个中间结点返回中间第二个结点比如[1,2,3,4,5]中间结点是3[1,2,3,4,5,6]中间结点是4一、通过链表长度进行计算1. 计算链表结点个数需要遍历一次,所以首先遍历一次链表,计算链表结点个数。2. 计算出结点个数,然后计算中间结点,无论是奇数还是偶数都是length/2+1。3. 找出这个结点返回即可。#include<stdio.h>#include<stdlib.h> struct

2022-04-28 18:30:34 2677 1

原创 C语言实现翻转字符串中的单词

一、另外开辟一个空间,来存放翻转的字符串单词之间是以空格间隔的,所以我们翻转需要一个一个字符进行翻转,我们需要找寻空格,找到空格表示一个字符已经找到,进行以下的步骤:1. 首先获取原字符串的长度,申请一个长度+1的空间,因为还需要一个结束符。2. 定义一个变量i,初始化为0,用i进行字符串的遍历,定义一个start用来表示每个单词的起始位置。3. 遍历字符串,不是空格i++,直到遇见空格,表示找到了一个单词。4. 将该单词从末尾放到咱们新开辟的数组中,就实现了逆序。5. 空格也需要放到临时数组

2022-04-26 20:50:48 2993

原创 C语言实现搜寻插入位置

数组是有序的,给定一个值,在数组中查询当前值,如果又返回其索引,没有的话,返回该元素按顺序排列的位置比如:数组元素:{1,3,5,6},给定元素6,应返回3,给定元素0应返回0首先数组是有序的,我们可以考虑使用二分查找来查询元素查找元素范围是可变的,找到元素直接返回所在索引找不到元素,左右区间是可变的,如果要插入位置在区间中间的右边left是要大于right的,此时left位置就是元素要插入的位置left,如果要插入位置在区间中间的左边,right是要小于left的,此时left就是要插入位置,可

2022-04-24 19:58:04 1192

原创 C语言实现二分查找

实现二分查找,找到元素返回元素位置,找不到返回-1。数组是有序的。所以我们通过折半查找,循环中我们一直在更新left,right,mid1、先与中间的元素进行比较,2、如果小于中间的元素说明要查找的元素在中间位置的左边,所以我们就将查找的元素缩小到左边。3、如果大于中间元素说明要查找的元素在右边,所以我们将数组缩小到右边。4、否则该位置就是要查找元素。循环退出后表明目标元素没有在数组中返回-1。#include<stdio.h>// nums数组,numsSize数组长度,tar

2022-04-23 21:45:14 1118

原创 判断环形链表

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnwzei/1、快慢指针,快指针移动两次,慢指针移动一次,如果两指针相遇,表示链表有环。就像钟表一样,秒针和分针总会指在同一个地方。只要快指针比慢指针快,链表中存在环,两个指针就会相遇。main函数代码:#include<stdio.h>#include<stdlib.h>bool hasCycle(struct ListN

2021-11-22 11:01:22 148

原创 判断回文链表

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnv1oc/1、首先最容易想到的是复制一个新的链表,然后将新链表反转,然后与原链表比较,相等的话就是回文链表,否则就不是。但是效率比较低,也占用了一部分新的空间。下面直接看代码:#include<stdio.h>#include<stdlib.h>bool isPalindrome(struct ListNode* head)

2021-11-19 12:45:36 495

原创 合并两个有序链表

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnnbp2//1、申请一个结点作为头结点。2、用两个指针指向两个链表,哪个链表的值小就通过尾插法插入到新的链表中。如果值相等,就任选一个作为结点插入新的链表。3、当前链表指针后移。4、直到有一个链表遍历完成。5、将没空的链表的剩余结点连接到新链表。main函数代码#include<stdio.h>#include<stdli

2021-11-18 21:32:29 363

原创 实现链表的反转

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnnhm6/1、利用头插法实现链表的反转,从链表第一个节点开始,当前节点作为新的头结点,一直到链表结束。上图:main函数代码:#include<stdio.h>#include<stdlib.h>// 结构体 struct ListNode { int val; struct ListNode *next;

2021-11-15 16:52:01 612

原创 删除链表的倒数第N个节点

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn2925/一、最容易想到的方法就是,计算出链表的长度,用长度减去n就是要删除节点的前一个节点,这里要注意的是,如果计算出来的节点位置为0,表示要删除第一个节点,直接头指针往后移一下就可以了。知道了前一个节点,删除后边的节点就好办了。假设指针p指向前驱结点,用一个临时的指针q指向要删除的节点,p->next = q->next,free(q),

2021-11-12 15:47:00 858

原创 删除链表中的节点

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnarn7//题目指出,不知道头结点的位置,只知道给出的删除节点,通过这个我们也可以知道要删除节点的下一个节点,所以我们可以这样做,假设要删除节点指针为p,下一个节点指针为q1、p->data = q->data(q指向节点的值赋值给p指向节点的值)。2、p->next = q->next(p的下一个节点指向q的下一个节点)。

2021-11-12 11:15:30 4271 1

原创 最长公共前缀

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnmav1/这里要求的是公共前缀,不考虑中间有相同的字符1、假设第一个字符串为公共前缀,首先和第二个字符串进行比较,找出两个的公共前缀,然后找第三个,直到整个字符串数组完毕。2、利用indexof,找到就返回该字符串第一个字符出现的开始位置,这个题目也就是0,否则就返回-1。3、若没有找到,就截取字符串,删除末尾字符,重复1,2步,直到第一个字符串为

2021-11-10 22:04:51 247

原创 实现外观数列

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnpvdm/当时想用c语言实现,但是没有想到好的方法,就用java来实现。原理就是,首先将字符串首位元素取出,依次和后边的元素进行比较,1、如果相等我们就用一个计数器count来保存出现的次数,每出现一次,计数器就加一。2、如果遇到不相等的元素,首先将计数器count和元素添加进字符串,然后将计数器置为0,将当前元素保存继续判断1。3、直到字符串结

2021-11-10 12:32:13 842

原创 实现 strStr() 函数

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnr003/给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。采用双指针法,分别指向两个数组的首位,如果两个元素相等,指针同时后移,如果不相等,needle从首位重新开始,haystack从相同元素的刚开始相同位置的下一个位置

2021-11-09 20:42:36 273

原创 字符串转换整数

题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnoilh/要求看上述链接的要求符号代表+,-遍历字符串,字符串一开始只能是空格,符号,或者是数字,如果不是上述的字符,直接退出循环,返回0。如果有空格,符号还要判断是不是在数字前边,不是的话就退出循环。还要判断符号出现的次数,出现两次及以上直接返回0。还要判断是否越界问题。main函数代码可以修改#include<stdio.h>

2021-11-06 17:50:01 73

原创 递归解决奶牛问题

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?递归解决问题,首先要找出规律,大的问题需要子问题来解决,不妨假设第n年成年牛数量a[n]中年牛数量b[n]青年牛数量c[n]小牛牛数量d[n]中年牛长成成年牛的那一年就可以生小牛了,成年牛就可以生小牛牛了。a[n] = a[n-1]+b[n-1]b[n] = c[n-1]c[n] = d[n-1]d[n] = a[n-1]+b[n-1]=a[n]假设总数量s

2021-11-01 22:00:27 579

原创 验证回文串

题目来源于力扣–https://leetcode-cn.com/给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。1、首先将字符串的字母转为小写字母。2、遇到非字母或者数字跳过3、比较字母或者数字是否相同main函数代码#include<stdio.h>bool isPalindrome(char * s);int main(){ char s[] = "A man, a plan, a canal: Panama"; bool isTrue =

2021-11-01 20:02:17 115

原创 有效的字母异位词

题目来源于力扣–https://leetcode-cn.com/查找字符串中每个字符出现的次数,如果每个字符出现的次数是一样多的,那就返回true,否则返回false。出现的字符都是小写,因为小写字母ASCII码是数字,字符也是可以排序的,这种情况下首先判断两个字符串的长度是否一致,长度不一致,直接返回false,如果长度一致就进行快速排序,在判断每个字符串的每个位置的字符是否相等,如果相等返回true,否则返回false。main函数代码#include<stdio.h>void qu

2021-10-29 21:43:49 68

原创 查找字符串中第一个唯一的字符

题目来源于力扣–https://leetcode-cn.com/可以用一个临时的数组来对出现的字符进行计数,题目要求,字符全都是小写的,所以我们可以给定一个26大小的数组来存放每个字符出现的次数,最后循环判断哪个地方的字符为1,就是第一个出现的唯一字符,否则返回-1。main函数代码#include<stdio.h>int firstUniqChar(char * s);int main(){ char s[]="leetcode"; int num = firstUniqCh

2021-10-29 21:08:18 225

原创 实现整数的翻转

题目来源于力扣–https://leetcode-cn.com/从获取整数的低位开始,然后一直到最高位,首先是取余获取最低位,然后整除再取余,依次类推,获取整数的每位数字,但是这个题要求翻转后的数字不能超过int所存储的最大数字,且要求环境不能存储64位数字,这边我是参考的,力扣的官方解析,题目解析请点击此处加上判断最后如图过程就实现了翻转:main函数代码#include<stdio.h>#include<limits.h>int reverse(int x);in

2021-10-29 11:54:55 196

原创 实现字符串的翻转

题目来源于力扣–https://leetcode-cn.com/使用双指针法,一个指向数组末尾high,一个指向数组首位置low,交换数组元素,low++,high–,当low>=high的时候,表示这个过程已经完成。时间复杂度O(n)main函数代码#include<stdio.h>void reverseString(char* s, int sSize);int main(){ char s[5] = {'h','e','l','l','o'}; reverseStr

2021-10-27 22:02:28 89

原创 求解两元素之和等于给定值的两元素下标

题目来源于力扣–https://leetcode-cn.com/给定一个值,找出数组中两个元素之和等于这个值的元素下标,并以数组的形式返回,顺序可以任意,给定的值只会对应一个答案,数组的元素不能重复输出,比如{1,1},这是不可行的。一、暴力枚举两个循环,枚举直到找到与给定值相同的两个元素,时间复杂度O(n²),空间复杂度O(1)main函数下的代码#include<stdio.h>#include<malloc.h>int* twoSum(int* nums, int

2021-10-27 20:09:59 246

原创 数组零元素移动到末尾

题目来源于力扣–https://leetcode-cn.com/将数组中的零元素移动到数组末尾,非零元素相对的顺序不会被改变。 将非零元素往前移,使用两个指针,i指针,j指针,初始化指在数组首位,i所指的位置是可以被替换的位置,当j指针所指元素不为0时,将j所指位置的元素赋值给i所指的位置,i++,j++,否则为0时,i不动,j++。main函数下的代码#include<stdio.h>void moveZeroes(int* nums, int numsSize);int mai

2021-10-27 10:18:50 1722

原创 实现数组加一

题目来源于力扣数组中的各个元素由0-9之间的数字组成,组成一个非负整数,包括0,9。除了0之外,不会有数字以0开头。数组的首位是数字的最高位,比如{1,2,3}加一操作后变成{1,2,4},{0}加一变成{1},{9}加一变成{1,0}...

2021-10-26 10:51:35 1373

原创 数组的交集

求数组中的相同元素,这是力扣上的一道题,很容易想到的方法就是,将数组进行排序,然后利用双指针法分别指向两个数组,在两个指针都不到达数组结尾的情况下,如果元素相同就将该元素放到临时数组中,两个指针分别向后移动,如果某个数组的元素小于另一个数组的元素,小的指针移动,继续判断两个元素大小,直到有一个指针到达数组末尾。时间复杂度O(nlogn)main函数下的代码#include<stdio.h>#include<malloc.h>#include<math.h>int

2021-10-25 18:46:01 230

原创 查找数组中只出现一次的数据

题目规定只有一个数出现了一次,这个题目最容易想到的办法是通过异或运算异或运算:1、a^a=02、a^0=a3、a ^ b ^ c=a ^ c ^ b可以根据这三个规律进行异或运算,最后得出的结果就是出现一次的那个数。main函数代码,可以根据自己的需求修改#include<stdio.h>int singleNumber(int* nums, int numsSize);int main(){ int nums[5] = {4,1,2,1,2}; int number =

2021-10-24 21:18:29 366

原创 查找数组中是否有重复元素

如果数组中有至少两个重复元素就返回true,否则就返回false一、这个最容易想到的就是暴力枚举,一个一个遍历,给它一个计数器如果有一个元素出现了两次,直接返回true,剩下的就不走了,否则返回false,这个方法是最容易想到的,但是时间复杂度O(n²),空间复杂度O(1),数组元素较多的情况下,效率很低。main函数下的代码#include<stdio.h>bool containsDuplicate(int* nums, int numsSize);int main(){ int

2021-10-22 21:21:11 2922 2

原创 实现数组翻转

一、一般能想到的最简单的方法,就是每次把最后一个位置的元素暂时保存一下,然后将其余的元素忘后移动,然后将暂时保存的元素放到第一个位置,这个方法简单容易想到,但是性能不够好。时间复杂度O(n²),空间复杂度O(1)。继续更新其他方法。#include<stdio.h>void rotate(int* nums, int numsSize, int k);int main(){ // 初始化数组 int nums[7] = {1,2,3,4,5,6,7}; // 旋转的次数 int

2021-10-21 16:43:20 337

原创 股票利益最大化(贪心算法及动态规划)

1.可以多次买卖一支股票2.不能参加多笔交易,买之前需要把之前的股票卖掉贪心算法实现原理:只要第二天比第一天的股价贵,能赚钱的就买下来,然后第二天卖掉。否则的话就不买。main函数下的代码#include<stdio.h>int maxProfit(int* prices, int pricesSize);int main(){ // 初始化一个股票价格数组 int prices[5] = {7,2,4,9,5}; int profit = maxProfit(prices,

2021-10-21 10:51:24 1421

原创 c语言删除数组中的重复元素

初始代码,可根据自己的需求进行修改#include<stdio.h>int removeDuplicates(int *nums,int numsSize);int main(){ // 初始化数组 int num[5] = {1,1,1,1,1}; int length = removeDuplicates(num,5); // 打印数组长度 printf("%d\n",length); // 遍历数组 for(int i=0;i<length;i++){ pri

2021-10-20 21:40:16 4464

原创 最大子列和实现算法(三种方式)-----C语言

首先给出一个main函数,可以直接替换函数即可,我默认写的是五位数,需要多少可以自行替换#include<stdio.h>#define N 5int MaxSubSeq(int list[]);int main(){ int list[N]; printf("Input list:\n"); for(int i = 0;i<N;i++){ scanf("%d",&list[i]); } int maxSubSum = MaxSubSeq(list); pr

2021-09-18 21:34:32 353 1

原创 Java super关键字

super关键字用于继承 super关键字可以用来修饰属性,方法,构造器 1.当子类中的属性,方法与父类中的属性,方法重名或者想调用父类中的属性,方法时,可以用super.方法(属性)来调用父类中的方法属性。若想调用子类中的同名属性则通过this.属性 父类 子类 2.super修饰构造器 子类可通过super(形参列表)来访问父类中的构造器 该语句要放在子类构造器的第一行,...

2018-09-10 21:37:51 213

原创 Java实现杨辉三角

代码如下: * 使用二维数组打印一个 10 行杨辉三角. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ….【提示】 1. 第一行有 1 个元素, 第 n 行有 n 个元素 2. 每一行的第一个元素和最后一个元素都是 1 3. 从第三行开始, 对于非第一个元素和最后一个元素的元素. yanghui[i...

2018-09-09 17:37:32 253 2

原创 Java二维数组的使用

在Java当中二维数组是比较有意思的,很多时候会搞不懂这个二维数组。下面来简单介绍一下二维数组。 二维数组就是数组中的元素是数组。 二维数组的定义:以int类型举例 int [][]scores;//定义一个int类型的二维数组 二维数组的初始化: 1.静态初始化(直接后面大括号赋值) int [][]scores;//定义一个int类型的二维数组 scores = new int[...

2018-09-09 16:05:35 21928 1

空空如也

空空如也

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

TA关注的人

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