算法练-括号匹配
题目给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例:{()},()[],都是有效匹配,{()]为无效匹配 方法:栈思路由题目可以知道,要有效匹配,就得左括号和右括号匹配,后出现的左括号总是和先出现的右括号匹配,遵循后进先出的特点,而这一特点就和栈的特点类似 代码实现import java.util.*;public class test{ public static void main(String[] args) { Solution solution = new Solution(); System.out.println(solution.isVaild("{[]}")); }}class Solution{ //算法主体 public boolean isVaild(String s) ...
算法练-删除链表中重复元素
算法练中将包含相关算法和一些与考研题目结合的C语言的算法题进行延伸思考,在用Java简单实现的同时,对内容深化并尝试C语言的叙述来更加巩固当前知识点。 题目1存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。 方法:一次遍历思路这个题的思路比较简单,因为是按升序排列的,所以重复的元素基本都是相邻着的,因此只需要比较相邻两个节点的值,就能判断出是否是重复的。 代码实现//删除链表中的重复元素public class test { public static void main(String[] args) { Node head = new Node(0); Node node1 = new Node(1); Node node2 = new Node(1); Node node3 = new Node(3); Node node4 = new Node(3); Node node5 = ...
算法练-环形链表
题目给定一个链表,判断链表中是否有环。 如果链表中存在环,就返回true。否则,返回false。 方法一:哈希表思路这个方法就是遍历整个链表中的所有节点,每遍历一个节点就判断它此前是否被访问过 用哈希表来存储已经访问过的节点,之后每到达一个节点时,如果该节点已经在哈希表里,就说明这个链表中有环 否则就把这个节点存入进去,重复这么一个过程,直到整个链表被遍历完 代码实现import java.util.*;//哈希表判断链表中是否有环public class test { public static void main(String[] args) { Node head = new Node(0); Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node node4 = new Node(4); Node node5 = new Node(5); hea ...
算法练-反转单链表
题目给单链表的头节点 head ,请反转链表,并返回反转后的链表。 示例输入:head = [1,2,3,4,5]输出:[5,4,3,2,1] 方法一: 双指针迭代思路 首先要引入两个指针,分别是prev和curr,因为要把链表反转,那么就必须对next做文章,通过curr指针让当前节点的next指向上一个节点,而上一个节点由prev指针来表示。指向更改后两个指针往后移位。 但是在这里有一个问题,就是当curr.next->prev后,如图,节点1和节点2之间就断开了,那么curr指针就无法进行后移操作,所以我们还需要一个临时变量next,在将curr.next->prev前,先将curr的下一个节点暂时保存在这个临时变量next中,等第一个节点反转之后,prev后移,再将next里的值给到curr实现其后移。 代码实现//迭代法实现反转链表public class test { public static void main(String[] args) ...
算法练-两数之和
题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 方法一: 暴力枚举思路通过枚举数组中的每一个数,组合来查找是否有适合target的两个整数 设两个数分别是x , y,他们的下标是i , j 两个循环,第一个找一个x,x前面的数都和x匹配过了,所以只需要去找x后面的数,即从j=i+1开始找y 找到了x和y就可以将两个下标输出 代码实现//暴力枚举找出两数之和public class test { public static void main(String[] args) { int nums[] = new int[]{2, 7, 11, 15}; ...
单链表的创建和遍历的实现(Java)
之前站点上的文章,搬过来一下 (一点学习记录和问题思考) 创建单链表并实现数据的增删改查… 案例内容将水浒英雄作为元素加进去,并且对他们进行排序输出,使用带head节点的单链表,实现一个水浒英雄排行榜管理,有两种方法: 添加英雄时,直接添加到链表尾部 根据排名将英雄插入到指定位置(如果有这个排名,则添加失败,给出提示) 方法一思路 要先创造一个头节点,作为链表的头(力扣里把他叫做哨兵节点),因为需要判断链表是否为空 之后每添加一个节点,就把他放在链表的尾部 关键是遍历,因为有了一个头节点,且这个头节点是不能移动的(注释有讲),所以需要一个辅助变量来遍历整个链表 代码实现public class SingleLinkedListDemo { public static void main(String[] args) { HeroNode hero1 = new HeroNode(1, "宋江","及时雨"); HeroNode hero2 = new HeroNode(2, " ...
从零开始搭建博客(hexo+github)
前言 本篇文章主要会讲如何借用hexo框架来简单搭建一个属于自己的博客(基于Windows系统),从前期准备到部署到github上一个时间并不长的流程。同时通过这种整理成册的方式来加深自己的印象(不希望还有重新搭建的回忆),因为时间的问题,首次整理流程可能会有遗漏或者错误的地方,我会收集反馈和时不时检查来处理这些问题,下面就开始博客搭建之旅吧。 安装准备首先我们要安装两个重要的东西,他们是Git和node node下载地址:https://nodejs.org/zh-cn/ (下载LTS版本,即长期支持版本,hexo需要node.js来支持) Git下载地址:https://git-scm.com/ 安装就一直点下一步直到安装结束就行了 安装好了这两个东西后可以在桌面鼠标右键选择git bash here打开git控制台 $ node -v$ npm -v 可以分别执行这两个操作来查看自己的node和npm的版本 初次使用git控制台,会让你注册,就是填邮箱和你的名称(自定义就行) git config --global user. ...
暴雨将至
调试文章,经典咏流传