leetCode day02

day02 leetCode

1. 有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效

java:
public static  boolean isContion(String s){
        //基数不不满足条件
        if(s.length()%2==1){
            return false;
        }
        Stack<Character> stack = new Stack();
        for (int i = 0; i <s.length() ; i++) {
            char c = s.charAt(i);
            if(c=='('||c=='{'||c=='['){
                stack.push(c);
            }else{
                if(stack.empty())return false;//没有左括号,不满足条件
                Character p1 = stack.peek();
                if((p1=='{'&&c=='}')||(p1=='('&&c==')')||(p1=='['&&c==']'))stack.pop();
                else return false;

            }

        }
        return stack.empty();
    }

2.删除排序数组重复项

描述:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 
//
// 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
java:
public static int getLength(int []num){
        if(num.length==0||num==null)return 0;

        //指定两个指针,一个在索引0的位置,一个在索引1的位置
        int p =0;
        int q=1;
        while(q<num.length){
            //这样就可以去除 重复的值 而且并未开辟新的空间
            if(num[p]!= num[q]){
                num[p+1]=num[q];
                p++;
            }
            q++;
        }
        return p+1;
    }

3.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 
//
// 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
java
public static int getLength(int[]nums,int val){
//指定了两个指针,通过控制指针的位置,控制着赋值,返回值的注意,p++,p值;
        int p=0;
        for (int i = 0; i <nums.length ; i++) {
            if (nums[p] != nums[i]) {
                nums[p]=nums[i];
                p++;
            }
        }
        return p;
    }

4.实现strStr

描述:
// 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如
//果不存在,则返回 -1。 
java
public static int strStr(String haystack, String needle) {
    int L = needle.length(), n = haystack.length();

    for (int start = 0; start < n - L + 1; start++) {
      if (haystack.substring(start, start + L).equals(needle)) {
        return start;
      }
    }
    return -1;
  }(官网是采用的二种)  ++i的性能要强于i++,运行的次数也一样的,结果也是一样的
  public static int strStr(String haystack, String needle) {
    int L = needle.length(), n = haystack.length();

    for (int start = 0; start < n - L + 1; ++start) {
      if (haystack.substring(start, start + L).equals(needle)) {
        return start;
      }
    }
    return -1;
  }
  关于  for(i++)for(++i)有详细的解答
  https://zhidao.baidu.com/question/40433825.html?fr=iks&word=for%D1%AD%BB%B7+i%2B%2B+%BA%CD%2B%2Bi&ie=gbk

5搜索 插入位置

描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 

 示例 1: 
    // 输入: [1,3,5,6], 5
    //输出: 2
 示例 2: 
    // 输入: [1,3,5,6], 2
    //输出: 1
示例 3:
    // 输入: [1,3,5,6], 7
    //输出: 4

public  static int  getInt(int[]arr,int target){
        //首先判断目标函数大于arr,数组是有序的
        if(target>arr[arr.length-1])return arr.length;
        //采用  二分查找的方式
        int start=0;
        int end=arr.length-1;
        int mid= start+(end-start)/2 ;//mid可以出现在中间的位置也可能在偏左的位置例如: 3/2 =1
        while (start<end){
            if (target > arr[mid]) {
                start=mid+1;
            }else if (target < arr[mid]){
                end=mid-1;
            }else {
                target=mid;
            }
                        
        }
     return start;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值