LeetCode刷题

1.53最大和的连续子数组

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

class Solution {
    public int maxSubArray(int[] nums) {

        int sum = 0;
        int res = nums[0];
        for(int num:nums){

         if(sum > 0) sum += num;
         else sum = num;
         res = Math.max(sum,res);      
        }
        return res;

    }
}

解析:num为数组的当前元素,sum为和,如果sun为负数就指向当前元素,如果为正就加上当前元素

res保留上一次求和的值,和当前的sum取最大值。

2.30有效字符串

package com.recorder.servlet;

import java.util.LinkedList;

/**
 * @author 紫英
 * @version 1.0
 * @discription 有效字符串——括号匹配问题
 */
public class A {

    public static void main(String[] args) {

        System.out.println(isValid("{}"));
        System.out.println(isValid("{}("));
        System.out.println(isValid("{}()[]}"));
        System.out.println(isValid(""));

    }
    //使用链表来模拟栈结构
    private static boolean isValid(String s){

        if ("".equals(s) || s.length() == 0) return true;//空串为真直接返回
        LinkedList<Character> list = new LinkedList<>();
        for (char c : s.toCharArray()) {

            if (c == '{') list.push('}');
            else if (c == '[') list.push(']');
            else if (c == '(') list.push(')');
            /**
             * 1.如果读取到的是左括号,那么右括号必定入栈,肯定不是空
             * 2.如果是空的话说明读到的是单个一个右括号
             * 3.如果是一对对应的括号,如果读取到左一定会让右入栈,那么在读取到右出栈的时候
             *  一定是与当初入栈的元素相同的,而且不为空
             * 4.如果这两个条件的都不满足就说明含有单一括号
             * (还有一种情况是单一的左括号,出栈的时候找不到对应的,所以也是不等)
             */
            else if (list.isEmpty() || c != list.pop()) return false;

        }
        //如果在上面的判断种没有返回false,说明安全出栈了,也就表明是对应的括号,可以返回true
        return list.isEmpty();


    }

}

 

posted @ 2022-03-12 22:52  紫英626  阅读(21)  评论(0编辑  收藏  举报

紫英