- 消失的数字【C语言】
利用等差数列前n项和公式先计算出0~n的和,设一个临时变量i,利用一个for循环将各元素相加,然后两数相减最终得到所寻数
点击查看代码
int missingNumber(int* nums, int numsSize)
{
int misNum = (numsSize+1)*numsSize/2;
int i=0;
for(int j = 0; j < numsSize; j++)
i+=nums[j];
misNum = misNum-i;
return misNum;
}
- 移除元素【C语言】
遍历数组与交换元素同时进行,通过使用两个指针分别从头遍历数组和指向该数组的末尾,在有元素移除时,将该元素与末尾元素交换,之后缩短数组长度。在遍历完成时,返回数组的新长度。
点击查看代码
int removeElement(int* nums, int numsSize, int val)
{
int i = 0;
int n = numsSize;
\\在 while 循环中,使用 i 来遍历数组\\
while (i < n) {
if (nums[i] == val) {
nums[i] = nums[n - 1];
n--;
} else {
i++;
}
}
return n;
}
- 合并两个有序数组【C语言】
点击查看代码
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
int i = m - 1;
int j = n - 1;
int k = m + n - 1;
while (i >= 0 && j >= 0) {
if (nums1[i] > nums2[j]) {
nums1[k] = nums1[i];
i--;
} else {
nums1[k] = nums2[j];
j--;
}
k--;
}
while (j >= 0) {
nums1[k] = nums2[j];
j--;
k--;
}
}
- 多数元素
点击查看代码
int majorityElement(int* nums, int numsSize) {
int count = 0;
int ret = 0;
for (int i = 0; i < numsSize; i++) {
if (count == 0) {
ret = nums[i];
count = 1;
} else if (ret == nums[i]) {
count++;
} else {
count--;
}
}
return ret;
}
- 盛最多水的容器
点击查看代码
int maxArea(int* height, int heightSize)
{
int heightSum = 0;
for (int i = 0; i < heightSize; i++) {
for (int j = i; j < heightSize; j++) {
int currHeight;
if (height[j] > height[i]) {
currHeight = height[i] * (j - i);
} else {
currHeight = height[j] * (j - i);
}
if (currHeight > heightSum) {
heightSum = currHeight;
}
}
}
return heightSum;
}
- 搜索插入位置
点击查看代码
int searchInsert(int* nums, int numsSize, int target) {
int left = 0;
int right = numsSize - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
}
- 存在重复元素
点击查看代码
bool containsDuplicate(int* nums, int numsSize)
{
int lst[1000];
int i, j;
for (i = 0; i < numsSize; i++) {
for (j = 0; j < i; j++) {
if (nums[i] == lst[j]) {
return true;
}
}
lst[i] = nums[i];
}
return false;
}
- 数组中的第K个最大元素
点击查看代码
int partition(int* nums, int left, int right) {
int pivot = nums[left];
int i = left + 1;
int j = right;
while (1) {
while (i <= j && nums[i] <= pivot) {
i++;
}
while (i <= j && nums[j] > pivot) {
j--;
}
if (i > j) {
break;
}
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
nums[left] = nums[j];
nums[j] = pivot;
return j;
}
int findKthLargest(int* nums, int numsSize, int k) {
int left = 0;
int right = numsSize - 1;
while (1) {
int pos = partition(nums, left, right);
if (pos == k - 1) {
return nums[pos];
} else if (pos > k - 1) {
right = pos - 1;
} else {
left = pos + 1;
}
}
}
- 单词分析
点击查看代码
#include <stdio.h>
int main()
{
int count[26]={0},max=0,i;
char ch;
while((ch=getchar())!='\n')
count[ch-'a']++;
for(i=1;i<26;i++)
if(count[i]>count[max])
max=i;
printf("%c\n%d",max+'a',count[max]);
return 0;
}
- 成绩分析
点击查看代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i;int x=0,y=0;
scanf("%d",&n);
int score[n];
for(i=0;i<n;i++)
{
scanf("%d",&score[i]);
if(score[i]>=85 ) y++;
else if(score[i]>=60) x++;
}
printf("%.f%%\n",(x+y)*100.0/n);
printf("%.f%%\n",y*100.0/n);
return 0;
}