数据结构基础训练 数组与字符串

学习重点

集合一般被定义为:由一个或多个确定的元素所构成的整体。
列表(又称线性列表)的定义为:是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。
数组(Array)是有序的元素序列。
二维数组是一种结构较为特殊的数组,只是将数组中的每个元素变成了一维数组。它主要用于处理矩阵的相关问题。
字符串是由零个或多个字符组成的有限序列。
双指针技巧:一个指针从头部开始,而另一个指针从尾部开始。

解题思路

搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。

int searchInsert(int* nums, int numsSize, int target)
{
	int i;
	for(i=0;i<numsSize;i++)
	{
		if(target <= nums[i])
			return i;
	}
}

在这里插入图片描述

零矩阵

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零

void setZeroes(int** matrix, int matrixSize, int* matrixColSize){
    int i, j;
    int *row = (int*)malloc(sizeof(int) * matrixSize);
    int *col = (int*)malloc(sizeof(int) * matrixColSize[0]);
    memset(row, 0, sizeof(int) * matrixSize);
    memset(col, 0, sizeof(int) * matrixColSize[0]);
    for (i = 0; i < matrixSize; i++) {
        for (j = 0; j < matrixColSize[0]; j++) {
            if (matrix[i][j] == 0) {
                row[i] = 1;
                col[j] = 1;
            }
        }
    }
    for (i = 0; i < matrixSize; i++) {
        for (j = 0; j < matrixColSize[0]; j++) {
            if (row[i] == 1 || col[j] == 1) {
                matrix[i][j] = 0;
            }
        }
    }
    free(row);
    free(col);
}

在这里插入图片描述

最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。

char * longestCommonPrefix(char ** strs, int strsSize){
	int len,i,j,k=0,jdg=0; //用来判断是否退出循环
	char *s ;
	s = (char *)malloc(sizeof(char) * 201);
	if (strsSize == 0) {
		s[0] = '\0';
		return s;
	}
	len = strlen(strs[0]);
	for (i = 1; i < strsSize; i++)
		if (strlen(strs[i]) < len)
			len = strlen(strs[i]);
	for (i = 0; i < len; i++) {
		for (j = 1; j < strsSize; j++) {
			if (strs[j][i] != strs[0][i]) {
				jdg = 1;
				break;
			}
		}
		if (jdg == 0)
			s[k++] = strs[0][i];
		else
			break;
	}
	s[k] = '\0';
	return s;
}

在这里插入图片描述

反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

void reverseString(char *s, int sSize)
{
	int i, j;
	char temp;
	for(i=0,j=sSize-1;i<j;i++,j--)
	{
		temp = s[i];
		s[i] = s[j];
		s[j] = temp;
	}
}

在这里插入图片描述

代码地址

链接: 数据结构基础训练 数组与字符串.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值