力扣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)

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

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

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

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技术的日益增进,我们不仅可以借助深度学习框架来加速分子动力学模拟,以及降低分子模拟开发的门槛。还可以实现高通量模拟,使得用最小的开销并行的运行多个分子模拟成为可能。

云端炼丹,算力白嫖,基于云端GPU(Colab)使用So-vits库制作AI特朗普演唱《国际歌》

人工智能AI技术早已深入到人们生活的每一个角落,君不见AI孙燕姿的歌声此起彼伏,不绝于耳,但并不是每个人都拥有一块N卡,没有GPU的日子总是不好过的,但是没关系,山人有妙计,本次我们基于Google的Colab免费云端服务器来搭建深度学习环境,制作AI特朗普,让他高唱《国际歌》。 Colab(全名C