力扣26-2023.4.3

· 浏览次数 : 15

小编点评

**思路概述:** 1.遍历数组,并记录下已访问的元素。 2.如果当前元素与前一个元素相同,则跳过。 3.如果当前元素与前一个元素不同,则将其赋值给当前元素。 4.返回已访问元素的个数。 **C++程序:** ```c++ #include #include using namespace std; int removeDuplicates(vector& nums) { int j = 0; for (int i = 1; i < nums.size(); i++) { if (nums[j] == nums[i]) { continue; } nums[++j] = nums[i]; } return j + 1; } int main() { int m[10] = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4}; int k = removeDuplicates(m, 10); cout << "k = " << k << endl; for (int i = 0; i < k; i++) { cout << m[i] << " "; } return 0; } ``` **扩展:** - 在比较元素时,可以使用快速排序或归纳排序等技术提高效率。 - 可以根据需求修改算法,例如只处理数组中的特定类型元素。

正文

力扣26-2023.4.3

问题

26. 删除有序数组中的重复项

image-20230403212930019

image-20230403212946345

方法

  • 思路:

遍历数组,若后一个和前一个相同,则继续下一个;若后一个与前一个不同,则直接赋值。

  • C++程序:
#include <iostream>
#include <vector>
using namespace std;

int removeDuplicates(vector<int>& nums) {
    /*
    思路:遍历数组,若后一个和前一个相同,则继续下一个;若后一个与前一个不同,则直接赋值。
    */
	if (nums.size() < 2) 
        return nums.size();    //长度为1
	int j = 0;
	for (int i = 1; i < nums.size(); i++)
		if (nums[j] != nums[i]) 
            nums[++j] = nums[i];
	return ++j;
}

int main()
{
    int m[10] = {0,0,1,1,1,2,2,3,3,4}; // 输入数组
    vector<int> nums(m,m+10);
    
    int k = removeDuplicates(nums); // 调用
    cout << "k="<<k<<endl;

    for(int i=0;i<k;i++)
    {
        cout << nums[i]<<endl;
    }
    return 0;
}
  • C程序:
#include <stdio.h>

int removeDuplicates(int* nums, int numsSize){
    if(nums==NULL)
        return 0;   //为空
    int i,j=1;
    for(i=1;i<numsSize;i++){
        if(nums[i]==nums[i-1])
            continue;   //若后一个和前一个相同,则跳过
        nums[j++] = nums[i];    //若不同,则赋值
    }
    return j;
}
int main()
{
    int m[10] = {0,0,1,1,1,2,2,3,3,4}; // 输入数组
    
    int k = removeDuplicates(m,10); // 调用
    printf("k=%d\n",k);

    for(int i=0;i<k;i++)
    {
        printf("%d\n",m[i]);
    }
    return 0;
}
  • 扩展:

数组中元素比较

与力扣26-2023.4.3相似的内容:

力扣26-2023.4.3

力扣26-2023.4.3 问题 26. 删除有序数组中的重复项 方法 思路: 遍历数组,若后一个和前一个相同,则继续下一个;若后一个与前一个不同,则直接赋值。 C++程序: #include #include using namespace std; int

LeetCode买卖股票之一:基本套路(122)

力扣中的股票买卖类问题,从入门到精通

八股乱背,力扣不会!下辈子远离计算机

昨天接到了许久未见老友的一个电话,片刻寒暄之后聊到主题:朋友受人之托,帮人打听家中小孩选择计算机专业之后的就业问题的。 既然是朋友,自然不敢欺瞒,就把目前计算机就业相关的真实情况如实“汇报”了。 那么计算机行业现状如何呢?大家看这幅图自然就明白了: 杭州一家不知名的公司(我从业十几年未曾听过的一家公

yearrecord——一个类似痕迹墙的React数据展示组件

介绍一下自己做的一个类似于力扣个人主页提交记录和GitHub主页贡献记录的React组件。 下图分别是力扣个人主页提交记录和GitHub个人主页的贡献记录,像这样类似痕迹墙的形式可以比较直观且高效得展示一段时间内得数据记录。 然而要从0实现这个功能还是有一些麻烦得,并且该功能可用的场景也比较多,于是

C++算法之旅、09 力扣篇 | 常见面试笔试题(上)算法小白专用

算法学习笔记,记录容易忘记的知识点和难题。详解时空复杂度、50道常见面试笔试题,包括数组、单链表、栈、队列、字符串、哈希表、二叉树、递归、迭代、分治类型题目,均带思路与C++题解

LeetCode 周赛 342(2023/04/23)容斥原理、计数排序、滑动窗口、子数组 GCB

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 前天刚举办 2023 年力扣杯个人 SOLO 赛,昨天周赛就出了一场 Easy - Easy - Medium - Medium 的水场,不得不说 LeetCode 是懂礼数的 😁。 接

某公司自动化测试3面

# 某公司自动化测试3面 > 仅供参阅,并不提供参考答案,上课的时候多数讲解过 > 算法题给了你一个参考,都是力扣上的 ## 一面 ```text 1. 自我介绍 2. 关于自动化:怎么做的,目前的进展,效果如何,遇到的困难 3. 你的框架搭建,最初是考虑了哪些因素去设计的 4. 如何维护自动化ca

Spring扩展接口(2):BeanDefinitionRegistryPostProcessor

在此系列文章中,我总结了Spring几乎所有的扩展接口,以及各个扩展点的使用场景。并整理出一个bean在spring中从被加载到最终初始化的所有可扩展点的顺序调用图。这样,我们也可以看到bean是如何一步步加载到spring容器中的。 BeanDefinitionRegistryPostProces

Spring扩展接口(1):ApplicationContextInitializer

在此系列文章中,我总结了Spring扩展接口,以及各个扩展点的使用场景。并整理出一个bean在spring中从被加载到初始化到销毁的所有可扩展点的顺序调用图。这样,我们也可以看到bean是如何一步步加载到spring容器中的。 ApplicationContextInitializer org.sp

MindSponge分子动力学模拟——多路径分子模拟(2024.05)

随着硬件算力的发展,以及AI技术的日益增进,我们不仅可以借助深度学习框架来加速分子动力学模拟,以及降低分子模拟开发的门槛。还可以实现高通量模拟,使得用最小的开销并行的运行多个分子模拟成为可能。