C++学习笔记---再探 map 的用法之计数重复key的value值的方法,由leetcode 169题想到的
2016-08-03 20:19
721 查看
先描述下leetcode 169题的题目:
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
方法一:利用map的性质
方法二:利用insert的返回值
方法三:利用insert的返回值的传统写法,及其本质探究
从旧版的定义我们知道insert的返回值ret的类型为:
map的特性是这样的,当key value相同时,第二次以及以后出现的key value进行的insert操作均是无效的
所以ret->second 为 false,
所以 if 中的语句代表当map中有key 重复时 value 值自加1
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
方法一:利用map的性质
class Solution { public: int majorityElement(vector<int>& nums) { map<int,size_t> value; for(int i=0;i<nums.size();i++) { ++value[nums[i]]; } auto map_it=value.begin(); while(map_it!=value.end()) { if ((map_it->second)>(floor(nums.size()/2))) { break; } else ++map_it; } return map_it->first; } };
方法二:利用insert的返回值
class Solution { public: int majorityElement(vector<int>& nums) { map<int,size_t> value; for(int i=0;i<nums.size();i++) { auto ret=value.insert({nums[i],1}); if(!ret.second) ++ret.first->second; } auto map_it=value.begin(); while(map_it!=value.end()) { if ((map_it->second)>(floor(nums.size()/2))) { break; } else ++map_it; } return map_it->first; } };
方法三:利用insert的返回值的传统写法,及其本质探究
class Solution { public: int majorityElement(vector<int>& nums) { map<int,size_t> value; pair<map<int,size_t>::iterator,bool> ret; for(int i=0;i<nums.size();i++) { ret=value.insert({nums[i],1}); if(!ret.second) ++ret.first->second; } auto map_it=value.begin(); while(map_it!=value.end()) { if ((map_it->second)>(floor(nums.size()/2))) { break; } else ++map_it; } return map_it->first; } };
从旧版的定义我们知道insert的返回值ret的类型为:
pair<map<int,size_t>::iterator,bool>
map的特性是这样的,当key value相同时,第二次以及以后出现的key value进行的insert操作均是无效的
所以ret->second 为 false,
set.first->second // 则指代map中的size_t
所以 if 中的语句代表当map中有key 重复时 value 值自加1
相关文章推荐
- C++学习笔记——位操作的妙用 由leetcode318题想到的
- 在主方法中创建map集合中存储3个学生对象.key使用字符串表示编号(不能重复)value是学生对象。然后调用以下两个方法;
- 【方法2】删除Map中Value重复的记录,并且只保留Key最小的那条记录
- 【方法3:Perl版本】删除Map中Value重复的记录,并且只保留Key最小的那条记录
- C++学习的一些笔记-->2:防止头文件多次导入造成重复编译的方法
- C++学习笔记-----std::pair作为unordered_map的key
- C++学习笔记——erase删除字符串中特定字符 由leetcode383题想到的
- 【方法1】删除Map中Value重复的记录,并且只保留Key最小的那条记录
- iOS学习笔记03—Key-Value-Coding(KVC,键/值编码)
- C++学习笔记(一)--基础知识sizeof用法
- static关键字用法学习笔记(C++)
- 【C++ 学习笔记】:STL-map
- C++ Data Structure 学习笔记 (2011.5.2)——Cin的用法详解以及文件的读取
- [C++学习] effective c++ 笔记 pass by value ,pass by reference
- [转载]C++中 使用数组作为map容器VAlue值的解决方法
- C++学习笔记---------基础知识sizeof用法
- c++学习笔记-map的使用实例(单词转换)
- C++学习笔记(七)--联合/共用体(union)用法
- C++ STL学习笔记十二 hash_map映照容器
- 金庸小说考试之模板方法模式学习笔记[C++版]