LeetCode算法题(26-28)

第26题:删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k 。

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array

int removeDuplicates(int* nums, int numsSize){
    int i, sum;
    if(numsSize == 0)  return 0;
    if(numsSize == 1)  return 1;
    sum = 1;
    for(i = 1; i <numsSize; i++)
    {
        if(nums[i] != nums[sum-1])
        {
            nums[sum] = nums[i];
            sum++;
        }
    }
    return sum;
}

第27题:移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-element

int cmp(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;
}
int removeElement(int* nums, int numsSize, int val){
    int len = 0;
    int i, j, k;
    i = 0;
    qsort(nums, numsSize, sizeof(int), cmp);
    for( i = 0; i < numsSize; i++)
    {
        if(nums[i] == val) break;
    }
    if(i == numsSize)  return numsSize;
    for( j = i+1; j < numsSize; j++)
    {
        if(nums[j] != val)  break;
    }
    if(j == numsSize) return i;
    k = j - i;
    len = numsSize - k;
    for( i = i; i < len ; i++)
    {
        nums[i] = nums[i + k];
    }
    return len;
}

第28题:实现strStr()
实现 strStr() 函数。

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-strstr

int strStr(char * haystack, char * needle){
    int len1 = strlen(needle);
    int len2 = strlen(haystack);
    if(len1 == 0) return 0;
    if(len1 > len2) return-1;
    int i, j;
    for(i = 0; i < len2; i++)
    {
        if(haystack[i] == needle[0])
        {
            if(i + len1 > len2) return -1;
            for(j = 1; j < len1; j++)
            {
                
                if(haystack[i+j] != needle[j])  break;
                
            }
            if(j == len1)  return i;
            
        }
    }
    return -1;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容