我在想,为什么刷题。为了以后找工作吗,这样完全功利地去刷真的真的会很累,这周四上毛概课,我看到旁边的女同学在那里刷pta上的作业(数据结构::图),看着她把红叉叉变成绿勾,那手舞足蹈的样子,讲真的,大学以来,我几乎很少会这个样子。那样的开心快乐,因为自己解决了难题。
所以我不在局限于Java去做,因为我发现很多时候我都行用c++去对抗一把,即使俺才刚学没几个小时的c++。但是我自己却扼杀了自己的兴趣,还把刷题当作了任务。
算法让我看到了许许多多神仙思路,也让我对数学重拾兴趣。(ง •_•)ง
开工开工!!
237. 删除链表中的节点
有一个单链表的 head
,我们想删除它其中的一个节点 node
。
给你一个需要删除的节点 node
。你将 无法访问 第一个节点 head
。
链表的所有值都是 唯一的,并且保证给定的节点 node
不是链表中的最后一个节点。
删除给定的节点。注意,删除节点并不是指从内存中删除它。这里的意思是:
node
前面的所有值顺序相同。node
后面的所有值顺序相同。自定义测试:
head
和要给出的节点 node
。node
不应该是链表的最后一个节点,而应该是链表中的一个实际节点。示例 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
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
ListNode p=node.next;
node.val=p.val;
node.next=node.next.next;
}
}
感觉Java写出来就不太直观。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
ListNode *p=node->next;
node->val=p->val;
node->next=p->next;
delete(p);
}
};
1614. 括号的最大嵌套深度
如果字符串满足以下条件之一,则可以称之为 有效括号字符串**(valid parentheses string**,可以简写为 VPS):
""
,或者是一个不为 "("
或 ")"
的单字符。AB
(A
与 B
字符串连接),其中 A
和 B
都是 有效括号字符串 。(A)
,其中 A
是一个 有效括号字符串 。类似地,可以定义任何有效括号字符串 S
的 嵌套深度 depth(S)
:
depth("") = 0
depth(C) = 0
,其中 C
是单个字符的字符串,且该字符不是 "("
或者 ")"
depth(A + B) = max(depth(A), depth(B))
,其中 A
和 B
都是 有效括号字符串depth("(" + A + ")") = 1 + depth(A)
,其中 A
是一个 有效括号字符串例如:""
、"()()"
、"()(()())"
都是 有效括号字符串(嵌套深度分别为 0、1、2),而 ")("
、"(()"
都不是 有效括号字符串 。
给你一个 有效括号字符串 s
,返回该字符串的 s
嵌套深度 。
示例 1:
输入:s = "(1+(2*3)+((8)/4))+1"
输出:3
解释:数字 8 在嵌套的 3 层括号中。
示例 2:
输入:s = "(1)+((2))+(((3)))"
输出:3
//C++
class Solution {
public:
int maxDepth(string s) {
stack p;
int ans=0;
int max=0;
for(int i=0;ians?max:ans;
}
return max;
}
};
//JAVA
class Solution {
public int maxDepth(String s) {
int top=0;
int max=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='('){
top++;
}
if(s.charAt(i)==')'){
top--;
}
max=max>top?max:top;
}
return max;
}
}