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