• leetcode-简单


    448. 找到所有数组中消失的数字

    硬解 时间O(n),空间O(n)

    1. class Solution {
    2. public:
    3. vector<int> findDisappearedNumbers(vector<int>& nums) {
    4. vector<int> result;
    5. vector<int> tem(nums.size()+1, 0);
    6. for(int i: nums)
    7. {
    8. tem[i] = 1;
    9. }
    10. for(int i = 1; i < nums.size()+1; i++)
    11. {
    12. if(tem[i] == 0)
    13. {
    14. result.push_back(i);
    15. }
    16. }
    17. return result;
    18. }
    19. };

    由于num属于[1,n],遍历nums,每遇到一个数num,令nums[num - 1]的值加n,表示有集合中有num这个数。

    1. class Solution {
    2. public:
    3. vector<int> findDisappearedNumbers(vector<int>& nums) {
    4. vector<int> res;
    5. for(int i = 0; i < nums.size(); i++)
    6. {
    7. int x = (nums[i] - 1) % nums.size();
    8. nums[x] = nums[x] + nums.size();
    9. }
    10. for(int i = 0; i < nums.size(); i++)
    11. {
    12. if(nums[i] <= nums.size())
    13. {
    14. res.push_back(i + 1);
    15. }
    16. }
    17. return res;
    18. }
    19. };

    374. 猜数字大小

    暴力解法,超出时间限制

    1. /**
    2. * Forward declaration of guess API.
    3. * @param num your guess
    4. * @return -1 if num is higher than the picked number
    5. * 1 if num is lower than the picked number
    6. * otherwise return 0
    7. * int guess(int num);
    8. */
    9. class Solution {
    10. public:
    11. int guessNumber(int n) {
    12. for(int i = 1; i <=n; i++)
    13. {
    14. if(0 == guess(i))
    15. {
    16. return i;
    17. }
    18. }
    19. return -1;
    20. }
    21. };

     二分查找,注意n可能会大于int,代码可以通过,但是如果要找的数大于int是不是会出问题,关键他自己的guess参数只有int。

    更正:应该时计算mid时left+right时溢出,应使用

    int mid = left + (right - left) / 2; // 防止计算时溢出
    1. class Solution {
    2. public:
    3. int guessNumber(int n) {
    4. uint left = 1;
    5. uint right = n;
    6. uint mid;
    7. while(1)
    8. {
    9. mid = (left + right) / 2;
    10. uint res = guess(mid);
    11. if(-1 == res)
    12. {
    13. right = mid - 1;
    14. }
    15. else if(1 == res)
    16. {
    17. left = mid + 1;
    18. }
    19. else if(0 == res)
    20. {
    21. return mid;
    22. }
    23. }
    24. }
    25. };

    303. 区域和检索 - 数组不可变

    1. class NumArray {
    2. private:
    3. vector<int> nums;
    4. public:
    5. NumArray(vector<int>& nums) {
    6. this->nums = nums;
    7. }
    8. int sumRange(int left, int right) {
    9. int sum = 0;
    10. for(int i = left; i <= right;i++)
    11. {
    12. sum += nums[i];
    13. }
    14. return sum;
    15. }
    16. };

    用一个数组保存累加和,需要的时候直接返回区间差

    1. class NumArray {
    2. private:
    3. vector<int> nums;
    4. public:
    5. NumArray(vector<int>& nums) {
    6. int n = nums.size();
    7. this->nums.resize(n + 1);
    8. for(int i = 0; i < n; i++)
    9. {
    10. this->nums[i + 1] = this->nums[i] + nums[i];
    11. }
    12. }
    13. int sumRange(int left, int right) {
    14. return this->nums[right + 1] - this->nums[left];
    15. }
    16. };

    387. 字符串中的第一个唯一字符

    使用map

    1. class Solution {
    2. public:
    3. int firstUniqChar(string s) {
    4. unordered_map<int, int> map;
    5. for(char i : s)
    6. {
    7. map[i] +=1;
    8. }
    9. for(int i = 0; i<s.size(); i++)
    10. {
    11. if(map[s[i]] == 1)
    12. {
    13. return i;
    14. }
    15. }
    16. return -1;
    17. }
    18. };

     389. 找不同

     使用数组计数

    1. class Solution {
    2. public:
    3. char findTheDifference(string s, string t) {
    4. vector<int> vec(26, 0);
    5. for(char ch : s)
    6. {
    7. vec[ch - 'a'] += 1;
    8. }
    9. for(char ch : t)
    10. {
    11. vec[ch - 'a'] -= 1;
    12. }
    13. for(int i = 0; i < vec.size(); i++)
    14. {
    15. if(vec[i] == -1)
    16. {
    17. return char(i + 'a');
    18. }
    19. }
    20. return ' ';
    21. }
    22. };

    392. 判断子序列

    使用队列 

    1. class Solution {
    2. public:
    3. bool isSubsequence(string s, string t) {
    4. if(s.size()==0) return true;
    5. queue<char> qu;
    6. for(char ch : s)
    7. {
    8. qu.push(ch);
    9. }
    10. for(char ch : t)
    11. {
    12. if(ch == qu.front())
    13. {
    14. qu.pop();
    15. }
    16. if(qu.empty())
    17. {
    18. return true;
    19. }
    20. }
    21. return false;
    22. }
    23. };

  • 相关阅读:
    基于Java+SpringBoot+MyBatis的高铁/火车售票/订票系统
    和鲸科技受邀参与湖南省气象信息中心开展人工智能研究型业务支撑平台学术交流
    nginx 的漏洞改造
    不影响原来python2的情况下安装python3
    十年磨一剑,剑指IT技术之巅,WOT 全球技术创新大会 2022盛大开启
    C#获取声音信号并通过FFT得到声音频谱
    thingsboard之自定义规则链节点
    【微服务~Nacos】Nacos服务提供者和服务消费者
    springbboot配置druid多数据源
    IMX6ULL | 从零开始移植linux内核5.4.70_2.3.0
  • 原文地址:https://blog.csdn.net/weixin_44965579/article/details/136419933