LeetCode Java
20.有效的括号
1)运用栈
class Solution {
public boolean isValid(String s) {
Stack<Character> a=new Stack<>(); //初始化 栈
for (char c : s.toCharArray()) { //s.toCharArray()字符串转字符数组
if (c=='(') a.push(')');
if (c=='[') a.push(']');
if (c=='{') a.push('}');
if (c==')' | c==']' | c=='}') {
if(a.empty()) return false; //如果栈为空,最后一个无法匹配,则返回 false
else if(a.pop()!=c) return false ; //如果出栈元素不匹配则 false
}
}
//if (!a.empty()) return false;
return a.empty(); //此时如果为空,则全部匹配完成
}
}
2)替换思路,当字符串检测一对括号,消去括号
class Solution {
public boolean isValid(String s) {
while(s.contains("()")||s.contains("{}")
||s.contains("[]"))
{
if(s.contains("()"))
s=s.replace("()", "");
if(s.contains("{}"))
s=s.replace("{}", "");
if(s.contains("[]"))
s=s.replace("[]", "");
}
return s.length()==0;
}
}
1480.一维数组的动态和
思路:在原函数进行累加,但牺牲空间复杂度。
class Solution {
public int[] runningSum(int[] nums) {
for (int i = 0; i < nums.length-1; i++) {
nums[i+1] +=nums[i];
}
return nums;
}
}
通过为n申请额外空间是空间复杂度下降
class Solution {
public int[] runningSum(int[] nums) {
int n=nums.length;
int [] faye = new int[n];
faye[0] = nums[0]; //[1,2,3,4]
for (int i = 1; i < n; i++) {//[1,3,6,10]
faye[i] = faye[i-1]+nums[i];
}
return faye;
}
}
02.03.删除中间节点
思路:只能访问节点, ListNode(int x),不修改值,访问目标节点,然后从目标节点指向下个节点,(我变成你,然后我再把你干掉)
input [4,5,1,9]
5
output [4,1,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) {
/*[4,5,1,9]
5 */
node.val = node.next.val; //a b d d e f
node.next =node.next.next;
}
}
1822.数组元素积的符号
原思路:当检测到负数后,a+1,当a为奇数则为负,偶数则为正。
class Solution {
public int arraySign(int[] nums) {
int a=0,s=0;
for (int i : nums) {
if(i==0) {
s=0;
break;
}
else if(i<0) {
a+=1;
}
if(a%2==0) s=1;
else s=-1;
}
return s;
}
}
定义布尔类型,是负数则负数标志为1,正数则取反
class Solution {
public int arraySign(int[] nums) {
boolean fushu = false;
for (int i : nums) {
if (i==0)
return 0;
if (i<0)
fushu =!fushu;//true 存在负数
}
return fushu? -1:1;
}
}