目录
- 数组的相关面试题
- 点击进入>> [移除元素(LeetCode)](https://leetcode-cn.com/problems/remove-element/)
- 点击进入>> [删除有序数组中的重复项(LeetCode)](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array)
- 点击进入>> [合并两个有序数组(LeetCode)](https://leetcode-cn.com/problems/merge-sorted-array)
- 点击进入>> [轮转数组(LeetCode)](https://leetcode-cn.com/problems/rotate-array/)
- 点击进入>> [数组形式的整数加法(LeetCode)](https://leetcode-cn.com/problems/add-to-array-form-of-integer)
数组的相关面试题
点击进入>> 移除元素(LeetCode)
代码示例(C语言)
int removeElement(int* nums, int numsSize, int val){
int idx = 0;
for(int i = 0; i < numsSize ;++i)
{
if(nums[i] != val)
{
nums[idx++] = nums[i];
}
}
return idx;
}
点击进入>> 删除有序数组中的重复项(LeetCode)
代码示例(C语言)
int removeDuplicates(int* nums, int numsSize){
if(numsSize<=1)
return numsSize;
int idx = 1;
for(int i = 1; i< numsSize; ++i)
{
if(nums[i] == nums[i-1])
continue;
else
{
nums[idx++] = nums[i];
}
}
return idx;
}
点击进入>> 合并两个有序数组(LeetCode)
代码示例(C语言)
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int i = m - 1, j = n - 1, idx = nums1Size - 1;
while(i>=0 && j>=0)
{
if(nums1[i]<nums2[j])
{
nums1[idx--] = nums2[j--];
}
else
{
nums1[idx--] = nums1[i--];
}
}
if(j>=0)
memcpy(nums1,nums2,sizeof(int)*(j+1));
点击进入>> 轮转数组(LeetCode)
代码示例(C语言)
void rotate(int* nums, int numsSize, int k){
if(k >= 0)
{
k = ((numsSize>=k)?k:(k%numsSize));
reverse(nums, 0, numsSize-k-1);
reverse(nums, numsSize-k, numsSize-1);
reverse(nums, 0, numsSize-1);
}
}
void reverse(int* nums, int begin, int end)
{
while(begin<end)
{
nums[begin] = nums[begin]^nums[end];
nums[end] = nums[begin]^nums[end];
nums[begin++] = nums[begin]^nums[end--];
}
}
点击进入>> 数组形式的整数加法(LeetCode)
代码示例(C语言)
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* addToArrayForm(int* num, int numSize, int k, int* returnSize){
//计算整数k的位数
int len =0, kk = k;
while(kk != 0)
{
len++;
kk /= 10;
}
//申请数组
int arrlen = (numSize>len)?(numSize+1):(len+1);
int* ret = (int*)malloc(sizeof(int)*arrlen);
//进位
int step = 0;
int end = numSize -1;
*returnSize = 0;
while(arrlen-1 -(*returnSize) != 0 )
{
//逐位相加
if(end>=0 && (num[end]+k%10 + step)>=10)
{
ret[arrlen-1 -(*returnSize) ] = (num[end]+k%10 + step) % 10;
step = 1;
}
else if(end>=0 && (num[end]+k%10 + step)<10)
{
ret[arrlen-1- (*returnSize)] = (num[end]+k%10) + step;
step = 0;
}
else
{
if((k%10 + step)>=10)
{
ret[arrlen-1 -(*returnSize) ] = (k%10 + step) % 10;
step = 1;
}
else if((k%10 + step)<10)
{
ret[arrlen-1- (*returnSize)] = (k%10) + step;
step = 0;
}
}
if(k>0)
k/=10;
if(end>=0)
end--;
(*returnSize)++;
}
if(step == 1)
{
ret[0] = 1;
(*returnSize)++;
}
if((*returnSize) == arrlen)
return ret;
else
{
int* ret1 = (int*)malloc(sizeof(int)*(*returnSize));
memcpy(ret1, ret+1,sizeof(int)*(*returnSize) );
return ret1;
}
}