1、删除有序数组中的重复项
需求: 给你一个 升序排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持 一致 。
示例:
输入:int [] nums = {0,0,1,1,1,2,2,3,3,4};
输出:5, nums = [0,1,2,3,4]
package 数组;
public class _26 {
public static void main(String[] args) {
int [] nums = {0,0,1,1,1,2,2,3,3,4};
// int [] nums={1,1,2};
// int [] nums={1,1,2,2,3};
// int [] nums={1};
// int[] nums = {};
System.out.println(removeDuplicates(nums));
}
public static int removeDuplicates(int[] nums) {
int count=0;
for (int i=0;i<nums.length;i++){
if (nums[count]!=nums[i]){
nums[count+1]=nums[i];
count++;
}
}
return nums.length>0?count+1:0;
}
}
2、移除元素
需求:
(1)给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素,并返回移除后数组的新长度。
(2)不要使用额外的数组空间,你必须仅使用 O(1)
额外空间并 原地 修改输入数组。
package 数组;
public class _27 {
public static void main(String[] args) {
//27. 移除元素
// int[] nums = {0,1,2,2,3,0,4,2};
int[] nums = {};
// int[] nums = {1, 2};
// int[] nums = {1, 2, 2};
int val = 2;
System.out.println(removeElement(nums, val));
}
public static int removeElement(int[] nums, int val) {
int count = 0;
for(int i=0;i<nums.length;i++){
if (nums[i]!=val){
nums[count]=nums[i];
count++;
}
}
return nums.length>0?count:0;
}
}
3、搜索插入位置
需求:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置
示例一:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例二:
输入: nums = [1,3,5,6], target = 2
输出: 1
public class _35 {
public static void main(String[] args) {
// int[] nums = {1, 3, 5, 6};
int[] nums = {8};
int target = 7;
System.out.println(searchInsert(nums, target));
}
public static int searchInsert(int[] nums, int target) {
int index = 0;
for (int i = 0; i < nums.length; i++) {
if (nums.length==0){
return index;
}
if (nums[nums.length-1]<target){
index=nums.length;
return index;
}
if (nums[i] >= target) {
index = i;
return index;
}
}
return index;
}
}
4、最大数组和
需求:给你一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和
示例一:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
public class _53 {
public static void main(String[] args) {
// int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int[] nums = {-2};
// int[] nums = {-2};
System.out.println(maxSubArray(nums));
}
public static int maxSubArray(int[] nums) {
int res=nums[0];
int sum=0;
for(int i=0;i<nums.length;i++){
if(sum>0){
sum+=nums[i];
}else{
sum=nums[i];
}
res=res>sum?res:sum;
}
return res;
}
}