datawhale组队训练——LeetCode分类练习——查找1

题目链接:
第一题:35. 搜索插入位置
第二题:202. 快乐数
第三题:205. 同构字符串
第四题:242. 有效的字母异位词
第五题:290. 单词规律
第六题:349. 两个数组的交集
第七题:350. 两个数组的交集 II
第八题:410. 分割数组的最大值
第九题:451. 根据字符出现频率排序
第十题:540. 有序数组中的单一元素

目录

      • 35. 搜索插入位置
      • 202. 快乐数
      • 205. 同构字符串
      • 242. 有效的字母异位词
      • 290. 单词规律
      • 349. 两个数组的交集
      • 350. 两个数组的交集 II
      • 410. 分割数组的最大值
      • 451. 根据字符出现频率排序
      • 540. 有序数组中的单一元素

35. 搜索插入位置

题目描述
思路分析
分析:在有序数组中查找插入元素的位置,显然可以使用二分查找。这篇题解提供的思路是「排除法」,思路是:在循环的过程中,不断排除不需要的解,最后剩下的那个元素的位置就一定是插入元素的位置。

具体来说:

首先,插入位置有可能在数组的末尾(题目中的示例 3),需要单独判断,此时返回数组的长度;
否则,根据示例和暴力解法的分析,插入的位置是大于等于 target 的第 1 个元素的位置。
因此,严格小于 target 的元素一定不是解,在循环体中将左右边界 left 和 right 逐渐向中间靠拢,最后 left 和 right 相遇,则找到了插入元素的位置。根据这个思路,可以写出如下代码。
程序代码

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int n = nums.size();
        int left = 0, right = n - 1, ans = n;
        while (left <= right) {
            int mid = ((right - left) >> 1) + left;
            if (target <= nums[mid]) {
                ans = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return ans;
    }
};

202. 快乐数

题目描述
思路分析
程序代码

205. 同构字符串

题目描述
思路分析
程序代码

242. 有效的字母异位词

题目描述
思路分析
程序代码

290. 单词规律

题目描述
思路分析
程序代码

349. 两个数组的交集

题目描述
思路分析
程序代码

350. 两个数组的交集 II

题目描述
思路分析
程序代码

410. 分割数组的最大值

题目描述
思路分析
程序代码

451. 根据字符出现频率排序

题目描述
思路分析
程序代码

540. 有序数组中的单一元素

题目描述
思路分析
程序代码

你可能感兴趣的:(LeetCode,其它)