LeetCode26. 删除有序数组中的重复项 27. 移除元素 35. 搜索插入位置 数组,双指针 二分查找
26. 删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k。去重后,返回唯一元素的数量 k。
nums 的前 k 个元素应包含 排序后 的唯一数字。下标 k - 1 之后的剩余元素可以忽略。
具体代码:
package com.example.shuzu;
import org.junit.Test;
public class LeetCode26 {
@Test
public void test(){
int[] nums = {0,0,1,1,1,2,2,3,3,4};
System.out.printf(String.valueOf(removeDuplicates(nums)));
}
public int removeDuplicates(int[] nums) {
if(nums.length ==0){
return 0;
}
int index = 1;
for (int i=1;i<nums.length;i++){
if(nums[i] != nums[index-1]){
nums[index] = nums[i];
index++;
}
}
return index;
}
}
27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
- 更改
nums数组,使nums的前k个元素包含不等于val的元素。nums的其余元素和nums的大小并不重要。 - 返回
k。
具体代码:
package com.example.shuzu;
import org.junit.Test;
public class LeetCode27 {
@Test
public void test(){
int[] nums = {3,2,2,3};
int val = 3;
System.out.printf(String.valueOf(removeElement(nums,val)));
}
public int removeElement(int[] nums, int val) {
int index = 0;
for(int i =0;i<nums.length;i++){
if(nums[i] != val){
nums[index] = nums[i];
index++;
}
}
return index;
}
}
35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
package com.example.shuzu;
import org.junit.Test;
public class LeetCode35 {
@Test
public void test(){
int[] nums = {1,3,5,6};
int target = 5;
System.out.printf(String.valueOf(searchInsert(nums,target)));
}
public int searchInsert(int[] nums, int target) {
int n = nums.length;
int left = 0,right = n-1,ans = n;
while(left <= right){
int mid = ((right - left) >>1) + left;
if(target <= nums[mid]){
ans=mid;
right = mid - 1;
}else{
left = mid +1;
}
}
return ans;
}
}
浙公网安备 33010602011771号