// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <vector>
#include <string>
#include <unordered_set>
#include <unordered_map>
#include <algorithm>
#include <numeric> using namespace std;
void show(const vector<int>& nums){
for (int i = ; i < nums.size(); i++){
cout << '\t' << nums[i];
}
cout << endl;
} int removeDuplicate(vector<int>& nums){
if (nums.empty()) return ;
int index = ;
for (int i = ; i < nums.size(); i++){
if (nums[i - ] != nums[i])
nums[index++] = nums[i];
}
return index;
} vector<int> twoSum(vector<int>& nums, int target){
unordered_map<int, int> mapping;
vector<int> res;
for (int i = ; i < nums.size(); i++)
mapping[nums[i]] = i;
for (int i = ; i < nums.size(); i++){
int gap = target - nums[i];
if (mapping.find(gap) != mapping.end()){
res.push_back(i + );
res.push_back(mapping.find(gap)->second + );
break;
}
}
return res;
} vector<vector<int>> threeSum(vector<int>& nums){
vector<vector<int>> result;
const int target = ;
if (nums.size() < ) return result;
sort(nums.begin(), nums.end());
auto last = nums.end();
for (auto i = nums.begin(); i < last - ; ++i){
while (i>nums.begin() && *i == *(i - )) continue;
auto j = i + ;
auto k = last - ;
while (j < k){
if (*i + *j + *k < target) {
++j;
while (*j == *(j - ) && j < k) ++j;
}
else if (*i + *j + *k > target){
--k;
while (*k == *(k + ) && j < k) --k;
}
else{
result.push_back({ *i, *j, *k });
++j;
--k;
while (*j == *(j - ) && *k == *(k + ) && j < k) ++j;
}
}
}
return result;
} int threeSumClose(vector<int>& nums, int target){
int result = ;
int min_gap = INT_MAX;
sort(nums.begin(), nums.end());
auto last = nums.end();
for (auto i = nums.begin(); i < last - ; ++i){
auto k = last - ;
auto j = i + ;
while (j < k){
int sum = *i + *j + *k;
int gap = abs(sum - target);
if (gap < min_gap){
min_gap = gap;
result = sum;
}
if (sum < target) ++j;
else --k;
}
}
return result;
} void next_Permutation(vector<int>& nums){
int i, j, k = nums.size();
for (i = k - ; i >= ; i--){
if (nums[i] < nums[i + ]){
for (j = k - ; j > i; j--){
if (nums[j] > nums[i])
break;
}
swap(nums[i], nums[j]);
reverse(nums.begin() + i + , nums.end());
return;
}
}
reverse(nums.begin(), nums.end());
} int trap_Water(vector<int>& hights){
int result = ;
int l = , r = hights.size() - ;
while (l < r){
int mn = min(hights[l], hights[r]);
if (mn == hights[l]){
++l;
while (mn > hights[l] && l < r)
result += mn - hights[l++];
}
else{
--r;
while (mn > hights[r] && l < r)
result += mn - hights[r--];
}
}
return result;
} int trap_WaterII(vector<int>& heights) {
vector<int> dpLeft(heights.size(), );
int maxLeft = ;
for (int i = ; i<heights.size(); ++i){
dpLeft[i] = maxLeft;
maxLeft = max(heights[i], maxLeft);
}
show(dpLeft);
int maxRight = ;
vector<int> dpRight(heights.size(), );
for (int j = heights.size() - ; j >= ; --j){
dpRight[j] = maxRight;
maxRight = max(heights[j], maxRight);
}
show(dpRight);
int result = ;
for (int k = ; k<heights.size(); ++k){
int minDiff = min(dpLeft[k], dpRight[k]);
if (minDiff > heights[k])
result += minDiff - heights[k];
}
return result;
} void rotate(vector<vector<int>>& matrix) {
const int n = matrix.size(); //matrix 的行数
for (int i = ; i < n;++i)
for (int j = ; j < n - i; ++j)
swap(matrix[i][j], matrix[n - - i][n - - j]); // 副对角线反转 for (int i = ; i < n / ;++i)
for (int j = ; j < n; ++j)
swap(matrix[i][j], matrix[n - - i][j]);//水平中线反转
} vector<int> plusOne(vector<int>& digits){
int c = ;//表示进位 carry
for (auto it = digits.rbegin(); it != digits.rend(); ++it){
*it += c;
c = *it / ;
*it = *it % ;
}
if (c > ) digits.insert(digits.begin(), );
return digits;
} int climbStairs(int n){ //迭代
int pre = ;
int cur = ;
for (int i = ; i <= n; i++){
int tmp = cur;
cur += pre;
pre = tmp;
}
return cur;
} vector<int> grayCode(int n){
int size = << n; //2^n
vector<int> result;
result.reserve(size);
for (int i = ; i < size; ++i)
result.push_back(i ^ (i >> ));
return result;
} void setZeroes(vector<vector<int>>& matrix){
const int rows = matrix.size();
const int columns = matrix[].size();
vector<bool> rowFlag(rows, false);
vector<bool> columnFlag(columns, false);
for (int i = ; i < rows; ++i){
for (int j = ; j < columns; ++j){
if (matrix[i][j] == )
rowFlag[i] = columnFlag[j] = true;
}
}
for (int i = ; i < rows; ++i){
if (rowFlag[i]){
for (int j = ; j < columns; ++j)
matrix[i][j] = ;
}
}
for (int i = ; i < columns; ++i){
if (columnFlag[i]){
for (int j = ; j < rows; ++j)
matrix[j][i] = ;
}
}
} int canCompleteCircuit(vector<int>& gas, vector<int>& cost){
int total = ,sum = ,start = ;
for (int i = ; i < gas.size(); ++i){
total += gas[i] - cost[i];
sum += gas[i] - cost[i];
if (sum < ){
start = i + ;
sum = ;
}
}
return total >= ? start : -;
} int candy(vector<int>& ratings){
const int n = ratings.size();
vector<int> nums(n, );
for (int i = ; i < n-; ++i){
if (ratings[i] < ratings[i+])
nums[i+] = nums[i] + ;
}
for (int j = n - ; j>; --j){
if (ratings[j] < ratings[j - ])
nums[j - ] = max(nums[j - ], nums[j] + );
}
return accumulate(nums.begin(), nums.end(),);
} int candyII(vector<int>& ratings) {
if (ratings.size() == ) return ;
vector<int> minLeft(ratings.size(), );
for (int i = ; i<ratings.size(); ++i){
if (ratings[i]>ratings[i - ])
minLeft[i] = minLeft[i - ] + ;
}
vector<int> minRight(ratings.size(), );
for (int j = ratings.size() - ; j >= ; --j){
if (ratings[j]>ratings[j + ]) //如果左边的等级高,而且左边的糖果又少的话
minRight[j] = max(minLeft[j], (minRight[j + ] + ));
}
int result = ;
for (int k = ; k<ratings.size(); ++k)
result += max(minLeft[k], minRight[k]); //取从左边和右边都最小的值中的最大值,这样就满足所有条件了。
return result;
} int singleNumber(vector<int>& nums){
int x = ;
for (int i = ; i < nums.size(); ++i)
x ^= nums[i];
return x;
} int singleNumberII(vector<int>& nums) {
int result = ;
for (int i = ; i < ; ++i){
int sum = ;
for (int j = ; j < nums.size(); ++j){
sum += (nums[j] >> i) & ;
}
result += (sum % ) << i;// result |= (sum % 3) << i;
}
return result;
} int main()
{
int myints[] = { ,,,,,,};
vector<int> myvec(myints, myints + sizeof(myints) / sizeof(int));
cout << "result:" << singleNumberII(myvec) << endl;
system("pause");
return ;
}

题目参考教材:https://github.com/soulmachine/leetcode(leetcode-cpp.pdf)

leetcode 数组类型题的更多相关文章

  1. leetcode 数组类型题总结

    1,removeDuplicates(I) int removeDuplicatesI(vector<int>& nums){ // 重新组织数组,同 removeDuplicat ...

  2. leetcode 字符串类型题

    1,Vaild Palindrome bool isPalindrome(string& s) { transform(s.begin(), s.end(), s.begin(), tolow ...

  3. leetcode 链表类型题总结

    链表测试框架示例: // leetcodeList.cpp : 定义控制台应用程序的入口点.vs2013 测试通过 // #include "stdafx.h" #include ...

  4. leetcode 树类型题

    树的测试框架: // leetcodeTree.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  5. LeetCode数组刷题——448、48、240、769

    1.[LeetCode448]:448. 找到所有数组中消失的数字 题目分析: 1-n之间有重复的,有没出现的,有出现一次.使用hashmap,空间复杂度为O(n) 方法一:哈希表,但是空间复杂度超过 ...

  6. leetcode 动态规划类型题

    1,Triangle int mininumTotal(vector<vector<int>>& triangle) { ; i >= ; --i) { ; j ...

  7. Leetcode数组题*3

    目录 Leetcode数组题*3 66.加一 题目描述 思路分析 88.合并两个有序数组 题目描述 思路分析 167.两数之和Ⅱ-输入有序数组 题目描述 思路分析 Leetcode数组题*3 66.加 ...

  8. 【js】Leetcode每日一题-数组异或操作

    [js]Leetcode每日一题-数组异或操作 [题目描述] 给你两个整数,n 和 start . 数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == ...

  9. 【js】Leetcode每日一题-解码异或后数组

    [js]Leetcode每日一题-解码异或后数组 [题目描述] 未知 整数数组 arr 由 n 个非负整数组成. 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encode ...

随机推荐

  1. if、else、elif

    if后面+判断条件 elif后面+判断条件 else 否则进行某些操作 举个列子 1 a = raw_input(">>>") 2 if a == "h ...

  2. hive 函数

    collect_set(x)   列转行函数---没有重复, 组装多列的数据的结构体collect_list(x) 列转行函数---可以有重复,组装多列的数据的结构体concat_ws 拼接函数, 用 ...

  3. Flex4学习笔记1---基本语法

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  4. Mybatis的回顾学习

    <!--id:statementId resultType:查询结果集的数据类型 parameterType:查询的入参 --> <selectid="getUserByI ...

  5. node.js 爬虫中文乱码 处理

    爬虫中文乱码可做如下处理 import request from 'superagent'; import cheerio from 'cheerio';//类似jquery写法 const Icon ...

  6. react-native android app名字 app包名、图标和启动图片设置

    1.设置名字 打开 android/app/src/main/res/values/strings.xml 如图,进行修改即可 2.设置图标,最简单可以直接替换,其他后在看 在上图中几个文件夹中都有一 ...

  7. 浅谈transient关键字

    1,用途 当一个对象实现了Serilizable接口,这个对象就可以被序列化.而有时候我们可能要求:当对象被序列化时(写入字节序列到目标文件)时,有些属性需要序列化,而其他属性不需要被序列化,打个比方 ...

  8. Excel快捷生成想要的xml或text

    1.新建一个xml格式的A.xml文本,里面有4条以上的内容,注意哦,里面的元素与Excel里面的标题列数是一直的,不然会少了对应的某列数据.如: 2.打开Excel——>新建一个sheetl— ...

  9. 434. Number of Segments in a String

    原题: 434. Number of Segments in a String 解题: 刚看到题目时,觉得可以通过统计空格个数,但想想有可能会有多个空格的情况 思路: 一:遍历字符,if条件碰到非空格 ...

  10. GIS案例学习笔记-CAD数据分层导入现有模板实例教程

    GIS案例学习笔记-CAD数据分层导入现有模板实例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 1. 原始数据: CAD数据 目标模板 2. 任务:分5个图层 ...