LeetCode26. 删除有序数组中的重复项 27. 移除元素 35. 搜索插入位置 数组,双指针 二分查找
给你一个非严格递增排列的数组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 i1;inums.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;inums.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]){ ansmid; right mid - 1; }else{ left mid 1; } } return ans; } }