文章目录

  • 938 二叉搜索树的范围和
  • 881. 救生艇
  • 844. 比较含退格的字符串
  • 692. 前K个高频单词
  • 268. 缺失数字

938 二叉搜索树的范围和

给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。
二叉搜索树保证具有唯一的值。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:int rangeSumBST(TreeNode* root, int L, int R) {vector<int> value;InOrder(root,&value);int sum=0,left=0,right=6;bool begin=false;for(int i=0;i<value.size();i++){if(value[i]==L && begin==false){left=i;begin=true;}if(value[i]==R){right=i;}}for(int i=left;i<right+1;i++){sum=sum+value[i];    }return sum;}      void InOrder(TreeNode* root,vector<int> * value){if(root!=NULL){InOrder(root->left,value); value->push_back(root->val);InOrder(root->right,value);  }}};static const auto kSpeedUp = []() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);return nullptr;
}();

二叉搜索树:
左节点小于根节点,右节点大于根节点
注意点:
(1)vector的作为函数参数需要传指针,传值是无效的。
(2)动态数组vector访问可以直接和数组一样vector [1],添加元素可以使用push_back。
(3)对于指针对象的成员函数或成员变量,应该使用->而不能使用.
而对于&或者对象本身,需要使用.而不应该使用->

InOrder(root->right,value);   //正确
InOrder(root.right,value);    //错误

(4)最后一段增加代码执行速度用的。
(5)NULL空指针,不是null

//完全迭代遍历
class Solution {public:int rangeSumBST(TreeNode* root, int L, int R) {if (root==NULL){return 0;}if(root->val>=L && root->val<=R)return root->val + rangeSumBST( root->left,  L,  R) + rangeSumBST( root->right,  L,  R);elsereturn rangeSumBST( root->left,  L,  R) + rangeSumBST( root->right,  L,  R);}
};
//根据二叉搜索树来进行迭代遍历
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:int rangeSumBST(TreeNode* root, int L, int R) {if (root==NULL){return 0;}if(root->val>=L && root->val<=R)return root->val + rangeSumBST( root->left,  L,  R) + rangeSumBST( root->right,  L,  R);else if(root->val<L)return rangeSumBST( root->right,  L,  R);elsereturn rangeSumBST( root->left, L,  R);}
};

881. 救生艇

第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。

每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。

返回载到每一个人所需的最小船数。(保证每个人都能被船载)。

class Solution {public:int numRescueBoats(vector<int>& people, int limit) {int num=0;sort(people.begin(),people.end());for(int i=0,j=people.size()-1;j>i;j--){if(people[j]+people[i]<=limit){num++;if(i+2==j){  //中间只剩下一个人num++;break;}                i++;}else{num++;if(i+1==j){ //中间没有人,但是两个人的重量加起来也超过最大限制。num++;break;}}}   return num;}
};static int speed_up = []() {ios::sync_with_stdio(false);cin.tie(nullptr);return 0;}();

注意点:
(1)vector数组大小,vector[vector.size()-1]
(2)void sort(RanIt first, RanIt last, cmp);前两个参数为迭代器指针,分别指向容器的首尾,第三个参数为比较方法,默认是升序排列。必须的头文件#include < algorithm>和using namespace std; 可以自定义cmp:

bool cmp(int x, int y) {return x > y;
}

844. 比较含退格的字符串

给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。

class Solution {public:
bool backspaceCompare(string S, string T)
{vector<char>v1,v2;for(char element:S)//处理S中的所有字符,结果存储在v1中{if(element!='#')v1.push_back(element);else{if(!v1.empty())v1.pop_back();}}for(char element:T)//处理T中的所有字符,结果存储在v2中{if(element!='#')v2.push_back(element);else{if(!v2.empty())v2.pop_back();}}if(v1!=v2)//判断得到的v1和v2是否相同return false;return true;
}
};// 还没想清楚为什么错
// class Solution {// public:
//     bool backspaceCompare(string S, string T) {//         string s,t;
//         for(int i=0;i<S.length();i++){//             if(S[i]!='#')
//             {//                 s=s+S[i];
//             }else{//                 if(s.length()!=0){//                  s.pop_back();
//                 }
//             }
//         }//         for(int i=0;i<T.length();i++){//             if(T[i]!='#')
//             {//                 t=t+T[i];
//             }else{//                 if(t.length()!=0){//                  t.pop_back();
//                 }
//             }
//         }//         if(s.length()!=t.length()){//             return false;
//         }else{//             for(int i=0;i<s.length()-1;i++)
//             {//                 if(s[i]!=t[i]){//                    return false;
//                 }
//             }
//             return true;
//         }//     }
// };

692. 前K个高频单词

class Solution {public:typedef pair<string, int> PAIR;struct CmpByValue {bool operator()(const PAIR& lhs, const PAIR& rhs) {if(lhs.second != rhs.second)return lhs.second > rhs.second;else{return lhs.first < rhs.first;}}};struct CmpByValue1 {bool operator()(const PAIR& lhs, const PAIR& rhs) {return lhs.first.compare(rhs.first)>0;}};vector<string> topKFrequent(vector<string>& words, int k) {unordered_map<string,int> word_map;unordered_map<string,int> result_map;for(int i=0;i<words.size();i++){// map<string,int>::iterator iter; // iter = word_map.find(words[i]);// if(iter!=word_map.end()){word_map[words[i]]++;// }else{//     word_map.insert(pair<string, int>(words[i], 1));// }}vector<PAIR> result(word_map.begin(), word_map.end());sort(result.begin(), result.end(), CmpByValue());vector<string> ans; //不能使用ans(k),会用默认值填充已分配的大小for(int i=0;i<k;i++){ans.push_back(result[i].first);}return ans; }
};

备注:
1.对map,unordered_map {key,value}对的插入并且记录key的个数,可以采用直接数组的方式
map[key]++;如果有存在key,则会++,
如果不存在会直接创建,而不需要:

 for(int i=0;i<words.size();i++){map<string,int>::iterator iter; iter = word_map.find(words[i]);if(iter!=word_map.end()){word_map[words[i]]++;}else{word_map.insert(pair<string, int>(words[i], 1));}}

直接

 for(int i=0;i<words.size();i++){word_map[words[i]]++;}

对于map中存储的pair<a,b> h,读取里面的值可以通过h.first以及h.second来进行解读。
2.auto使用,使得程序更加易懂和简洁

 for(auto a:words){word_map[a]++;}

3.sort使用
要对STL的数据结构进行排序,使用sort方法,正常情况下需要重载函数,
有两种方法:
1.重写一个结构体:

    typedef pair<string, int> PAIR;struct CmpByValue {bool operator()(const PAIR& lhs, const PAIR& rhs) {if(lhs.second != rhs.second)return lhs.second > rhs.second;else{return lhs.first < rhs.first;}}};

2.重新定义一个函数:

 typedef pair<string,int>node;bool cmp(const node &a,const node &b){if(a.second!=b.second)return a.second>b.second;else return a.first<b.first;
}

使用时,可以用:

sort(result.begin(), result.end(), CmpByValue());
sort(result.begin(), result.end(), cmp);

注意,sort只能针对线性结构的数据结构来进行,因此,如果是需要对map,或unordered_map进行排序的话,需要先转换数据格式到如vector中去。

typedef pair<string, int> PAIR;
vector<PAIR> result(word_map.begin(), word_map.end());

函数需要用static,否则只能写在类的外部。
定义函数的时候sort(result.begin(), result.end(), cmp);不用加括号。
定义结构体的时候需要加括号,结构体可以写在类的内部,函数运算相对较快。

268. 缺失数字

给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。
第一种思路,排序,对应序号的数据如果没有对应该为,则为缺失的数据。

class Solution {public:int missingNumber(vector<int>& nums) {sort(nums.begin(),nums.end());int i=0;for(auto a:nums){if(a!=i){break;}i++;}return i;}
};

最简单的方法应该是求和,然后和1到n项的数列和对比,相差的数就是缺的这个数
0,1,2,3…这些数字求和直接用求和公式会循环的程序运行时间。
accumulate(nums.begin(),nums.end(),0),STL模板函数API接口,可以

class Solution0 {public:int missingNumber(vector<int>& nums) {int size_num=nums.size();return size_num*(size_num+1)/2-accumulate(nums.begin(),nums.end(),0);}
};class Solution1 {public:int missingNumber(vector<int>& nums) {int size_num=nums.size();int sum_real=size_num;int sum_prac=0;for(int i=0;i<size_num;i++){  sum_prac+=nums[i];   }return size_num*(size_num+1)/2-sum_prac;}
};class Solution2 {public:int missingNumber(vector<int>& nums) {int size_num=nums.size();int sum_real=size_num;int sum_prac=0;for(int i=0;i<size_num;i++){sum_real+=i;   sum_prac+=nums[i];   }return sum_real-sum_prac;}
};

leecode[一]相关推荐

  1. 汇编语言求无符号数组中出现的次数最多数_【今日最佳leecode通俗易懂】无重复字符的最长子串...

    相信看了这个标题的同学,对这道题以已经非常不陌生了,就是leecode当中的第三题,之所以要单独的写一写主要对我来说,里面涉及到有一个滑动窗口, 散列表, 字符编码等知识点比较重要,也有几个小技巧,这 ...

  2. insertion Sort List (链表的插入排序) leecode java

    逻辑简单,代码难写,基础不劳,leecode写注释不能出现中文,太麻烦,我写了大量注释,链表问题最重要的就是你那个指针式干啥的 提交地址https://oj.leetcode.com/problems ...

  3. Leecode题解汇总(附题型归类)

    虽然已找到工作,但不断地自我学习和自我磨砺是无止境的. 为方便量化和总结经验,记录一下个人的Leecode刷题记录,之前的刷题并没有收录进去,有时间会统一整理. 序号 题目 题解 类型 来源 难度 0 ...

  4. Leecode31. 下一个排列——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...

  5. Leecode22. 括号生成——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...

  6. Leecode20. 有效的括号——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...

  7. Leecode 21. 合并两个有序链表——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 题目描 ...

  8. Leecode19. 删除链表的倒数第 N 个结点——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 题目描 ...

  9. Leecode17. 电话号码的字母组合——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...

  10. Leecode15. 三数之和——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...

最新文章

  1. binlog数据库不写入binlog_mysql 为什么不能仅仅用 binlog 保证不丢数据
  2. JVM基础系列第7讲:JVM 类加载机制
  3. OpenMV中AprilTag识别Python程序源码
  4. 你的女神今日结婚了!!!你失恋了......
  5. HTML day02
  6. 美图回应meitu商标纠纷:不影响主营业务 社交业务商标完备
  7. 【Cinemachine智能相机教程】VirtualCamera(二):Body属性
  8. c++ 输出二进制_Q音直播编译优化与二进制集成方案
  9. Win10/Server2016镜像集成离线补丁
  10. 漫画:什么是神秘的“凯利公式”?
  11. matlab solve 矩阵方程,用solve函数能求解带有未知数的矩阵方程组吗
  12. JavaScript丧尸游戏开发教程
  13. 单片机C语言步进电机实训报告,单片机实验报告步进电机.doc
  14. ROS使用节点句柄nh(“~“)和nh的区别:发布的话题的命名空间不同
  15. 网页导出pdf不完整_偶尔偷个懒吧:3种pdf文献全文一键翻译的方法
  16. Mob平台获取手机验证码
  17. 罗斯蒙特248温度变送器248HANANONS
  18. 举个栗子~Tableau 技巧(216):服务器视图中的文字乱码怎么办?
  19. linux运行php文件
  20. 外卖O2O硝烟初起巨头们各自是啥思路?

热门文章

  1. nginx反向代理Https、代理解决跨域问题
  2. Weblogic IIOP协议反序列化(CVE-2020-2551)漏洞复现
  3. vim 中跳到第一行和最后一行
  4. 第三届能源、材料科学与环境工程国际学术会议-ICEMSEE2022
  5. edge浏览器设置兼容模式怎么设置
  6. 微信小程序Vue+nodejs校园商铺商城购物系统uniapp
  7. PyTorch 分布式框架 Ray :保姆级入门教程
  8. 介绍一个很全面源码关于android 账户管理的源码
  9. python turtle红绿灯_【Python】类的组合案例(模拟街道红绿灯)
  10. Java生成压缩文件(zip、rar 格式)