First week tasks

  1. 消失的数字【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;
}
  1. 移除元素【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;
}
  1. 合并两个有序数组【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--;
    }
}
  1. 多数元素
点击查看代码
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;
}
  1. 盛最多水的容器
点击查看代码
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;
}
  1. 搜索插入位置
点击查看代码
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;
}
  1. 存在重复元素
点击查看代码
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;
}
  1. 数组中的第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;
        }
    }
}
  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;
}

  1. 成绩分析
点击查看代码
#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;
}

posted @ 2023-07-26 22:32  L&ZH  阅读(32)  评论(0)    收藏  举报