删除顺序数组的重复数字

描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

样例

给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。

思路:

第一次是错的,后来编译通过了,这道题我的想法是:第一,因为题上要求不能新增数组空间,所以我们考虑在原数组的覆盖,也就是把重复数字覆盖前面的一个数字,后面的依次往前覆盖,在编程里,是不存在删除一说的,只是数据的覆盖。覆盖前面的以后,最后的就可以通过缩小数据空间。

代码:

class Solution {
public:
int removeDuplicates(vector<int> &nums) {

if(nums.empty())
{
return 0;
}

int n = nums.size(),k=0;

for(int i=1;i<n;++i)
{
if(nums[i] != nums[k])
{
nums[++k] = nums[i];
}
}
nums.resize(k+1);
return k+1;
}
};

时间: 2024-10-23 08:24:31

删除顺序数组的重复数字的相关文章

去掉有序数组中重复数字 原地 leetcode java (最简单的方法)

1.利用荷兰国旗的思路,每次记住最后一个位置,遇到一个不重复的数,放在它后面,代码很简单. Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with consta

删除顺序链表中重复的数 (一) leecode

Given a sorted linked list, delete all duplicates such that each element appear only once. For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3. 1 /** 2 * Definition for singly-linked list. 3 * public class

LeetCode 26 Remove Duplicates from Sorted Array (移除有序数组中重复数字)

题目链接: https://leetcode.com/problems/remove-duplicates-from-sorted-array/?tab=Description 从有序数组中移除重复数字,并且返回不重复数字的个数 遍历操作: 可以使用新的for循环 for (int n : nums){} 每次进行对比,并且更新第一个遇到不相等的元素的下标为i 对数组进行重新赋值操作 当数组长度大于1时,ans初值为1,当数组长度为0时,返回0 参考代码 : package leetcode_5

删除有序数组的重复元素and爬楼梯and股票买入的最佳时期

---------1-----------#include "stdafx.h" #include"iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a[10]={1,4,4,5,6,7,7,8,9,10}; int i=0; int j=0; for(i=0;i<10;i++) { if(a[i]==-1)     {    break; } if(a[i]==

leetcode第26题:删除排序数组的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2. 你不需要考虑数组中超出新长度后面的元素.解题思路: 数组完成排序后,我们可以放置两个指针 ii 和 jj,其中 ii 是慢指针,而 jj 是快指针.只要 nums[i] = nums

找出排序数组中重复数字的个数

开始我的思路是先二分查找找到一个,然后再两边分别看个数. 但是这种方法会退化到O(n).效率不好. 所以更好的方法是,先找出第一个,再找出最后一个.这个在二分查找的时候,通过判断条件的处理,是能够获得的. 比较基本的思路是,如果找到的数=k,那么判断前面一个数是不是k,如果不是,停止查找,这个是第一个:如果是的,那么继续在前半部分查找.领悟.

数组中重复的数字 java

今天开始用java写算法题目. 题目大意,一个长度为 n 的数组,里面存放的数组是 0 到 n-1,数组中有重复数字的话就输出这个数字. 思路:将每个 nums[i] 的值 移动到他原来应该属于的地方,如果那个地方的值和现在的值相等,就重复了. 因为 java 不会使用,有下列语法错误. 1.给数组赋值的时候,直接写在后面.同时 int [ ] 里面不要放数组的长度. 2.swap 函数,交换的数组的两个值.不需要什么指针之类的, 直接写就好. public class test { publi

P66、面试题8:旋转数组的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 用二分查找的方式来查找数组的最小值,这个值是存在于最大值到最小值的转折中,一个指针指向第一个升序子数组的第一个元素,第二个指针指向第二个升序子数组的最后一个元素,确定数组中间的元素,如果是比第一个指针的元素大,则表示中间指针存在第一个升序子序列中,将第一个指针指向中间指针指向的元素

删除排序数组中的重复数字、买卖股票的最佳时机、爬楼梯

题目1:删除排序数组中的重复数字 描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 题目2:买卖股票的最佳时机 描述:假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 题目3:爬楼梯 描述:假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶