算法小练#1 - Dany Yang
开始记录每周做过的算法题,这是第一周,新的开始
1021. 删除最外层的括号
题目要求如下:
有效括号字符串为空 (“”)、”(“ + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,”“,”()”,”(())()” 和 “(()(()))” 都是有效的括号字符串。
如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。
给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + … + P_k,其中 P_i 是有效括号字符串原语。
对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
示例 1:
输入:"(()())(())"
输出:"()()()"
解释:
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。
示例 2:
输入:"(()())(())(()(()))"
输出:"()()()()(())"
解释:
输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
删除每隔部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。
示例 3:
输入:"()()"
输出:""
解释:
输入字符串为 "()()",原语化分解得到 "()" + "()",
删除每个部分中的最外层括号后得到 "" + "" = ""。
看完题目大概知道,这是在考察栈的问题,每一个括号都是成对出现的,需要将最外层的括号删除,保留里面的括号。
栈的特点就是先进后出。主要思路是关注右括号,如果右括号和左括号相等,说明是一个闭合的串,需要进行分解。如果未闭合就进行搜集起来
JavaScript解决办法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var removeOuterParenthese = function (S) {
let open = 0
let combine = ''
for (let c of S) {
if (c == ')') {
open --
}
if (open > 0) {
combine += c
}
if (c === '(') {
open ++
}
}
return combine
}
console.log大专栏 算法小练#1 - Dany Yangspan class="p">(removeOuterParenthese('(()())(())(()(()))'))
237. 删除链表中的节点
题目要求如下:
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
现有一个链表 – head = [4,5,1,9],它可以表示为:
1
4 --> 5 -->1 --> 9
1
2
3
4
5
6
7
8
9
10
示例 1:
输入: head = [4,5,1,9], node = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
示例 2:
输入: head = [4,5,1,9], node = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
1
2
3
4
5
6
说明:
链表至少包含两个节点。
链表中所有节点的值都是唯一的。
给定的节点为非末尾节点并且一定是链表中的一个有效节点。
不要从你的函数中返回任何结果。
解题思路
最开始看这个也一头雾水,怎么就只给一个节点,链表呢?其实也不必纠结这个,题目中明确说明了,只给你要删除的节点,所以链表的长度,链表的上一个节点都访问不到。
也就是说常规的链表删除节点是没办法用的(使上一个链表的节点的next,指向要删除节点的next),在不知道上一个节点的情况下,按照常规的办法不行,就换另一种解决思路。
这题精妙的地方就是它的解决思路,使用下一个节点的值,赋值给当前节点,然后再将它的next指向下个节点的next–>next,这样要删除的当前节点就消失了。是不是很精妙
JavaScript解决方案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} node
* @return {void} Do not return anything, modify node in-place instead.
*/
var deleteNode = function(node) {
node.val = node.next.val
node.next = node.next.next
}
链接:
算法小练#1 - Dany Yang的更多相关文章
- js 计时器小练-20160601
今天要做一个计时器小练,所以我就做了练习,代码如下. // 初始化时间,以及定义全局量去接收计时器 var timer = 0; var t; var h, min, sec, millisec; / ...
- for循环之初学者N多算法小练习
for循环之初学者N多算法小练习 显示1到100的数,每行显示5个. for (int i=1;i<=100;i++){ if (i%5==0){ System.out. ...
- 笔试算法稳了,GitHub 50k Star《labuladong的算法小抄》
秋招算法有救了!!! 前不久在 GitHub 出现了一个手把手带你刷 LeetCode 的项目:fucking-algorithm. 该项目此前在 GitHub 开源后,连续多次霸榜 GitHub T ...
- Github优质库分享-01算法小抄 基于LeetCode
Github 优质库分享-01 算法小抄 该库总共 60 多篇原创文章,都是基于 LeetCode 的题目,涵盖了所有题型和技巧,而且一定要做到举一反三,通俗易懂,绝不是简单的代码堆砌. 目前 sta ...
- labuladong 算法小抄
<labuladong的算法小抄官方完整版> 本书目前可以手把手带你解决 110 道 LeetCode 算法问题,而且在不断更 新,全部基于 LeetCode 的题目,涵盖了所有题型和技巧 ...
- java算法题每日一练01,java入门简单算法题小练
1.给数组做反序 public class Ak01 { public static void main(String[] args) { int[] a = new int[]{22,48,41,2 ...
- 【数据分析】算法+Echarts小练
''' 处理逻辑: 按number去处理 先遍历所有的number挨个去找有没有在列表里的,在列表里的拿出另外一个append 把number去除的列表 ''' li = [] with open(r ...
- 莫队算法-小Z的袜子
小Z的妹子袜子这道题用的是莫队算法,据说解决离线区间询问几乎无敌. 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于 ...
- java算法小知识练习
偶尔翻开了以前的练习题,不自觉又想随手敲一遍,虽然有些思想依然是那么老套,但毕竟也算是对知识的巩固 了. 一.题目:有1.2.3.4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 具体 ...
随机推荐
- 将List 分成n个长度由调用者指定的子List
public static void main(String[] args) { List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8); ...
- 网页滚动条CSS样式
滚动条样式主要涉及到如下CSS属性: overflow属性: 检索或设置当对象的内容超过其指定高度及宽度时如何显示内容 overflow: auto; 在需要时内容会自动添加滚动条overflow: ...
- 4)PHP命名规则,传值方式
(1)命名规则: 包括变量名,类名,接口名函数名等等 ①基本规则: 只能使用小写字母,下划线或者数字 数字不能开头 不能跟环境和系统关键字重复(比如,if,else,function) ② 驼峰式 ...
- scala编程(九)——控制抽象
减少代码重复 所有的函数都被分割成通用部分,它们在每次函数调用中都相同,以及非通用部分,在不同的函 数调用中可能会变化.通用部分是函数体,而非通用部分必须由参数提供.当你把函数值用做参数时,算法的非通 ...
- mysql数据库死锁的解决方案
1. 查询锁表信息 show OPEN TABLES where In_use > 0;2. 查看当前数据库锁表的情况 SELECT * FROM information_schem ...
- iOS之正则表达式(一)
这几天研究正则表达式发现正则表达式真是个好东西,可以在支付的时候轻松匹配交易数额,入门内容以及匹配如下: @interface ViewController () @property (weak, n ...
- Gre封装
在防火墙上连 云时,可以用g0/0/0 在防火墙上不连 云时,一定不用0/0/0 !!!!!!!!! 交换机什么都不配置. FW2: interface GigabitEthernet0/0/0 u ...
- 华为路由器AR1220E-S通过web页面不能登录
问题原因:由于在WEB页面配置了“远程信任主机”,但是信任主机和路由器不在一个网段,导致所有IP都不能通过WEB页面管理路由器 解决方案:通过console口直接连接路由器,删除信任主机,此次咨询了华 ...
- The Maximum Unreachable Node Set
题目描述 In this problem, we would like to talk about unreachable sets of a directed acyclic graph G = ( ...
- kettle的基本使用
一.下载下载kettlehttp://sourceforge.net/projects/pentaho/files/Data%20Integration/7.0/pdi-ce-7.0.0.0-25.z ...