1. 合并两个有序数组
代码实现:
方法一:将数组num2中的元素添加到数组num1的末尾,再排序
void merge(int *nums1, int nums1Size, int m, int *nums2, int nums2Size, int n) {for (int i = 0; i < n; i++) {nums1[m++] = nums2[i];}// 冒泡排序int flag = 1;for (int i = m - 1; flag && i > 0; i--) {flag = 0;for (int j = 0; j < i; j++) {if (nums1[j] > nums1[j + 1]) {flag = 1;int temp = nums1[j];nums1[j] = nums1[j + 1];nums1[j + 1] = temp;}}} }
方法二:将数组num2中的元素一个一个按顺序添加到数组num1中
void merge(int *nums1, int nums1Size, int m, int *nums2, int nums2Size, int n) {int i, j;for (i = 0; i < n; i++) {// 数组num1中没有元素,直接插入 || >= num1中所有元素,插入到末尾if (m == 0 || nums2[i] >= nums1[m - 1]) {nums1[m++] = nums2[i];} else {// 找到插入位置:jfor (j = m; j > 0; j--) {if (nums1[j - 1] > nums2[i]) {nums1[j] = nums1[j - 1];} else {break;}}nums1[j] = nums2[i];m++;}} }
2. 赎金信
代码实现:
哈希表
bool canConstruct(char *ransomNote, char *magazine) {int hash[26] = {0};for (int i = 0; i < strlen(ransomNote); i++) {hash[ransomNote[i] - 'a']++;}for (int i = 0; i < strlen(magazine); i++) {if (hash[magazine[i] - 'a']) {hash[magazine[i] - 'a']--;}}for (int i = 0; i < 26; i++) {if (hash[i]) {return false;}}return true; }