- C语言刷力扣
- 一 .有序数组删除重复项
- 二.罗马数字转整数
- 三.蓝桥杯(单词分析)
- 四.思路
- 用双指针实现(一)
- (二)
- (三)
- 代码(一)
- 代码(二)
- 代码(三)
如果数组中的长度为0,则数组不包含任何数则直接返回0; ,则对任意都有 即相等的元素在数组中的下标一定都是连续的,利用数组有序的特点所以使用双指针的方法来删除相等元素; 设置两个指针一个快指针fast和一个慢指针slow 初始值都为1, 这道题目不同的是如果左边的数小于右边就要减去左边的数,例如 IV=4,因为I=1,V=5,所以IV=5-1等于四;(这题想了好久 我他妈好菜) 用a[s[i]] 记录每个单词的个数在进行比较 欢迎分享,转载请注明来源:内存溢出
给定的数组是有序的所以一定满足i
nums[i] == nums[j]
*nums[i] = =nums[k] ==nums[j]*
*nums[fast]*
先遍历整个数组,从下标1到n-1;
如果遍历完后没有一个数和nums[fast]
一样,说明没有和nums[fast]
相同的数,因此将nums[fast]
的数复制到nums[slow]
,slow++即指向下一个位置,然后fast再加一继续查找
代码(二)
int removeDuplicates(int* nums, int numsSize){
if(numsSize==0)
{
return 0;
}
int fast = 1;
int slow = 1;
while(fast < numsSize)
{
if(nums[fast]!=nums[fast-1])//这边是fast-1
{
nums[slow] = nums[fast];
++slow;
}
++fast;
}
return slow;
}
代码(三)
int getnum(char s)
{
int num;
switch(s)
{
case 'I' :num = 1;break;
case 'V' :num = 5;break;
case 'X' :num = 10;break;
case 'L' :num = 50;break;
case 'C' :num = 100;break;
case 'D' :num = 500;break;
case 'M' :num = 1000;break;
}
return num;
}
int romanToInt(char * s){
int ans = 0;
int n = strlen(s);
for(int i = 0;i<n;i++)
{
int temp = getnum(s[i]);
if(i<n-1 && temp<getnum((s[i+1])))
{
ans = ans - temp;
}
else
{
ans = ans + temp;
}
}
return ans;
}
#include
评论列表(0条)