当前位置:网站首页 > 技术博客 > 正文

c语言中的移位运算符



力扣

LeetCode

)是著名的在线

算法

题库,其中第44题通常被称为“数组中第二小的元素”,英文原名是 "Second Minimum Number"。这个题目要求你在给定的未排序整数数组中找到并返回第二个最小的元素。如果你遇到的是 C

语言

相关的版本,你可以考虑以下解法:

1. 遍历法:可以先遍历整个数组,记录下最小值和次小值,时间复杂度为 O(n)。

```c

int findSecondMinimum(int nums[], int size) {

int min = INT_MAX;

int secondMin = INT_MAX;

for (int i = 0; i < size; i++) {

if (nums[i] < min) {

secondMin = min;

min = nums[i];

} else if (nums[i] > min && nums[i] < secondMin) {

secondMin = nums[i];

}

}

return secondMin == INT_MAX ? -1 : secondMin; // 如果没有找到第二个最小值,则返回-1 或者其他适当的默认值

}

  2. 排序法:也可以对数组进行排序,然后直接返回第二个元素。但是请注意,这会改变原始数组的状态,且时间复杂度提升到 O(n log n)。  ```c #include <stdio.h> #include <stdlib.h>  // 对数组进行快速排序并获取第二个元素 int findSecondMinimumQuickSort(int nums[], int left, int right) { int len = right - left + 1; if (len <= 1) return -1; // 排序后至少有2个元素  int pivotIndex = partition(nums, left, right); if (pivotIndex == 1) return nums[1]; // 第二小的就是第一个非最小子  return findSecondMinimumQuickSort(nums, left, pivotIndex - 1) || findSecondMinimumQuickSort(nums, pivotIndex + 1, right); // 分治查找 }  // QuickSort 的枢轴划分函数 int partition(int nums[], int left, int right) { int pivot = nums[right], i = left - 1; for (int j = left; j < right; j++) { if (nums[j] < pivot) { i++; swap(&nums[i], &nums[j]); } } swap(&nums[i + 1], &nums[right]); return i + 1; }  // 交换两个元素 void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; }  int main() { int nums[] = {1, 2, 3, 5, 6}; int size = sizeof(nums) / sizeof(nums[0]); printf("Second minimum is: %d ", findSecondMinimumQuickSort(nums, 0, size - 1)); return 0; } 

版权声明


相关文章:

  • assertthat函数2024-12-14 14:30:00
  • 文件对比工具 beyond compare2024-12-14 14:30:00
  • 数据库设计过程2024-12-14 14:30:00
  • java抽象类的概念和特点2024-12-14 14:30:00
  • delphi7入门教程2024-12-14 14:30:00
  • 简述kvm虚拟化功能特性及优缺点?2024-12-14 14:30:00
  • 归并排序基本过程2024-12-14 14:30:00
  • 计数排序公式2024-12-14 14:30:00
  • dns协议抓包分析2024-12-14 14:30:00
  • 班智达藏文输入法说明2024-12-14 14:30:00