package lisong.inter;
/**
* @author : lisong
* @date : 2019-10-24 15:55
* @deprecated 一导算法题
*/
public class Lecode {
// 使用1个堆栈即可解决,依次遍历这个字符串,如果遇到是左括号就入栈到堆栈中,
// 如果遇到的是右括号,则从堆栈中取出栈顶的第一个左括号,比对一下这个左括号
// 和当前遇到的右括号是否匹配,如果不匹配这认为这整个字符串无效。如果能匹配,
// 则OK,删除这个左括号和右括号,继续往后走,继续遍历字符串中剩下的字符,
// 只要遇到左括号就入栈,只要遇到右括号就与将栈顶的左括号出栈与之比较。
// 一直走到字符串结束,再来检查堆栈中是否还有元素,如果还有元素,则这个字符串同样无效
// ,如果堆栈为空,则字符串有效。
//
// 就以这个思路实现一个初版代码:
// class Solution {
// public boolean isValid(String s) {
// java.util.Stack<Character> satck = new java.util.Stack<Character>();
// for(int i=0; i<s.length();i++){
// char c = s.charAt(i);
// if(c=='(' || c=='{' || c=='['){
// satck.push(c);
// }else{
// if(satck.isEmpty()) return false;
// char temp = satck.pop();
// if( (temp=='('&&c==')') || (temp=='{'&&c=='}') || (temp=='['&&c==']') ){
// continue;
// }else{
// return false;
// }
// }
// }
// return satck.isEmpty();
// }
// }
// 这个代码的时间复杂度o(n),空间复杂度o(n)搞定。
//
// 但是想了想,好像代码不是很优雅,写了一个优化版,提前将左右括号放入到MAP中,这个方法的时间和空间复杂度跟上面的一样。
// class Solution {
// public boolean isValid(String s) {
// java.util.Stack<Character> stack = new java.util.Stack<Character>();
// java.util.HashMap<Character, Character> map = new java.util.HashMap<Character, Character>();
// map.put('(', ')');
// map.put('{','}' );
// map.put('[', ']');
//
// for(int i=0;i<s.length();i++){
// char c = s.charAt(i);
// if(map.containsKey(c)){
// stack.push(c);
// }else{
// if(stack.isEmpty()) return false;
// char temp = stack.pop();
// if(map.get(temp)!=c) return false;
// }
// }
// return stack.isEmpty();
// }
// }
//
// 继续思考有没有更简洁的方法,竟然在leetcode上找到了一个:
// 但是这个方法并没有用到堆栈哦,它的思路是不断的遍历这个字符串,
// 将字符串中的(){}[]全部调换成空字符串,如果最后全部替换完成了,
// 并且字符串为空了,就说明字符串是有效的,否者就是无效的字符串。
// class Solution {
// public boolean isValid(String s) {
// int length = s.length();
// do{
// length = s.length();
// s = s.replaceAll("\\(\\)","").replaceAll("\\{\\}","").replaceAll("\\[\\]","");
// }while(s.length()!=length);
// return s.length()==0;
// }
// }
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。
资源推荐
资源详情
资源评论
收起资源包目录
数据结构值排序算法.zip (17个子文件)
open_suanfayushujujiegouxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxxxxxxxxxxcxvcvcv
src
lisong
MergeSortImpl.java 2KB
RadixSortImpl.java 2KB
ShellSortImpl.java 1KB
QuickSortImpl.java 2KB
inter
Sort.java 253B
Lecode.java 3KB
QuickSort.java 196B
RadixSort.java 253B
ShellSort.java 221B
CountSort.java 175B
MergeSort.java 274B
CountSortImpl.java 987B
Test.java 1KB
web
WEB-INF
web.xml 304B
index.jsp 304B
.gitignore 29B
排序算法.iml 806B
共 17 条
- 1
资源评论
极致人生-010
- 粉丝: 2902
- 资源: 2822
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功