一. java学习笔记
运算符:
1.算术运算符:区别++先后的赋值运算
2.关系运算符
3.逻辑运算符:要求两边都是布尔类型结果也是布尔类型
&(逻辑与同真为真) |(逻辑或一真为真) !(取反)
&&(短路与) ||(短路或) 效率高
短路现象:当使用短路与 左表达式已经为假 右表达式不执行 && ;短路或 左表达式true右表达式不执行
4.赋值运算符:使用扩展运算符时,永远不会改变运算结果类型 例如:byte i; i += 10; i = i + 10; 两者不同
5.位运算符
6.条件运算符(三目运算符):布尔表达式 ? 表达式1 : 表达式2
布尔表达式为true时 表达式1结果为整个表达式结果
布尔表达式为false时 表达式2结果为整个表达式结果
7.字符串连接运算符: +
当两边都是数字时,进行加法运算
当有一个以上的字符串时 结果为字符串拼接 (字符串和其他类型的数据拼接时,数据直接输出)
例如:int i = 90; System.out.println(i + “abc”); 90abc
当有多个运算时 ,自左向右进行运算
eg:int a = 10 , b = 20; System.out.println(a + b + “30”); 3030
输出 100 + 200 = 300; int a = 100; int b = 200;
1.System.out.println(“100+200=300”);
2.System.out.println(a + “+” + b + “=” + (a + b)); 不加括号结果为100+200=100200
二.力扣每日一题
26. 删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
题目分析:可以使用双指针对数组进行覆盖,当快指针的数不等于慢指针的数,慢指针推进一位后等于快指针的数,这样去重
int removeDuplicates(int* nums, int numsSize){
if(numsSize == 0||nums == NULL) return 0;
int i = 0,j;
for(j = 1;j < numsSize;j++){
if(nums[j] != nums[i]){
i++;
nums[i] = nums[j];
}
}
return i+1;
}
8.字符串转化成整数
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0 。
分析题目要求:1.先去空格
2.判断第一个非空字符 ±时再连接后面有效数字 或者直接是数字或者为’\0’
可以使用switch语句判断
3.需要控制在int范围内,我们可以先计算ans值在与设置的上下限进行对比
int myAtoi(char * str){
int i=0;
int length=strlen(str);
long max=2147483647,min=-2147483648;
long long ans=0;
int flag=0;
while(str[i]!='\0'&&str[i]==' ')
i++;
//return i;
switch(str[i]){
case '+':{
i++;
while(str[i]!='\0'){
if(str[i]<='9'&&str[i]>='0'){
ans=ans*10+(str[i]-'0');
if(ans>max)
return max;
i++;
}else
break;
}
break;
}
case '-':{
i++;
while(str[i]!='\0'){
if(str[i]<='9'&&str[i]>='0'){
ans=ans*10+(str[i]-'0');
if(-ans<min)
return min;
i++;
}else
break;
}
ans=-ans;
break;
}
case '\0':
break;
default:{
while(str[i]!='\0'){
if(str[i]<='9'&&str[i]>='0'){
ans=ans*10+(str[i]-'0');
if(ans>max)
return max;
i++;
}else
break;
}
break;
}
}
return ans;
}