LeetCode Java 入门Day2

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;
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值