网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 其他技术区 > 算法与数据结构 >

LeetCode26. 删除有序数组中的重复项 27. 移除元素

时间:2025-12-24 11:12

人气:

作者:admin

标签:

导读:26. 删除有序数组中的重复项 给你一个#160;非严格递增排列#160;的数组#160;nums#160;,请你#160;原地#160;删除重复出现的元素,使每个元素#160;只出现一次#160;,返回删除后数组的新长度。元素...

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;
    }
}

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信