27
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
class Solution {
public int removeElement(int[] nums, int val) {
int length=nums.length;
for(int i=0;i<length;i++){
if(nums[i]==val){
for(int m=i+1;m<length;m++){
nums[m-1]=nums[m];
}
length--;
i--;
}
}
return length;
}}
此题较为简单,了解数组的基本操作即可
704 二分查找
题目描述:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
代码实现:
class Solution{public static int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid=(right-left)/2+left;
if(nums[mid]>target){
right=mid-1;
}
else if(nums[mid]<target){
left=mid+1;
}
else{
return mid;
}
}
return -1;
}}
看了解答后,才发现之前自己的二分查找存在许多漏洞,比如边界值的选择,以及自己在实现二分查找的时候实际上只是暴力解法,不容易想明白而且算法较为复杂。在解答中初次了解到了双指针法。
//关于此题引申出来两个之前不清楚的知识点,一是if和else和else if //对于上面有三个分支语句的情况,如果是if,if,else的情况,若1满足,2不满足,3满足,那么if和else都会执行。else的含义是,上一个if若不满足则直接执行括号内语句 //如果是if,else if,else的情况,那么第三个else只有在12都不满足的情况下才会执行。其中else if的含义是,如果1不满足,且else if后加条件成立则执行括号内语句 //二是当函数中的参数是一个数组变量时,应该如何传入参数 // 例如:函数是search(int[] nums, int target) //那么传入的方法就是 1.首先定义这个数组int[] array=new int[]{-1,0,3,5,9,12}; // search(array,2);需要注意的是,这个数组的名字不需要和形式参数中数组的名字一样,而是自己定义,最终在形式参数的地方写上该数组的名字就可以了。