时间:2025-12-24 11:12
人气:
作者:admin
给你一个 非严格递增排列 的数组 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;
}
}
给你一个数组 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;
}
}
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 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;
}
}
上一篇:读大话数据结构的总结1