三十六、
给定一个大小为
n
的数组nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋
的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3] 输出:3示例 2:
输入:nums = [2,2,1,1,1,2,2] 输出:2
int majorityElement(int* nums, int numsSize){int key = nums[0];//初始值赋值给keyint count = 0;for(int i=0;i<numsSize;i++){if(nums[i]==key)//从0开始,判定每个是否等于nums[0]{count++;}else{count--;}if(count<=0){key=nums[i+1];}}return key;
}
三十七、有效字母有效词
给定两个字符串
s
和t
,编写一个函数来判断t
是否是s
的字母异位词。注意:若
s
和t
中每个字符出现的次数都相同,则称s
和t
互为字母异位词。示例 1:
输入: s = "anagram", t = "nagaram" 输出: true示例 2:
输入: s = "rat", t = "car" 输出: false
int *cmp(const void* a,const *b)
{return *(char *)a-*(char *)b;
}bool isAnagram(char * s, char * t){if(strlen(s)!=strlen(t)){//判断字符长度return false;}
qsort(s,strlen(s),sizeof(char),cmp);
qsort(t,strlen(t),sizeof(char),cmp);
//排序完,查看两个是否相等
return strcmp(s,t)==0;
}
三十八、丢失的数字
给定一个包含
[0, n]
中n
个数的数组nums
,找出[0, n]
这个范围内没有出现在数组中的那个数。示例 1:
输入:nums = [3,0,1] 输出:2 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 2:
输入:nums = [0,1] 输出:2 解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 3:
输入:nums = [9,6,4,2,3,5,7,0,1] 输出:8 解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。示例 4:
输入:nums = [0] 输出:1 解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。
int cmp(const void* a,const void *b)
{return *(int *)a-*(int *)b;
}
int missingNumber(int* nums, int numsSize){qsort(nums,numsSize,sizeof(int),cmp);
for(int i=0;i<numsSize;i++)
{if(nums[i]!=i)//判断每1位是不是相等return i;
}
return numsSize;//比如[0],[0,1];
}
三十九、回文数
bool isPalindrome(int x){
char a[100];
sprintf(a,"%d",x);//把x变成字符串
int left=0,right=0;
right=strlen(a)-1;
while(left<right)
{
if(a[left]!=a[right]){return false;}else{left++;right--;}
}
return true;
}
四十、
给你一个 升序排列 的数组
nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回nums
中唯一元素的个数。示例 1:
输入:nums = [1,1,2] 输出:2, nums = [1,2,_]示例 2:
输入:nums = [0,0,1,1,1,2,2,3,3,4] 输出:5, nums = [0,1,2,3,4] 解释:函数应该返回新的长度
int removeDuplicates(int* nums, int numsSize) {if (numsSize == 0) {return 0; // 如果数组长度为0,直接返回0}int fast = 1, low = 0; // 定义快指针和慢指针,初始分别指向数组的第二个元素和第一个元素while (fast < numsSize) { // 当快指针未遍历完整个数组时执行循环if (nums[fast] != nums[low]) { // 如果快指针指向的元素与慢指针指向的元素不相等nums[low + 1] = nums[fast]; // 将快指针指向的元素赋值给慢指针的下一个位置low++; // 慢指针向后移动一位}fast++; // 快指针向后移动一位}return low + 1; // 返回去重后的数组长度(慢指针位置+1)
}