// 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. python中的format

    format()格式化字符串,将占位符替换成内容,举个例子: 1 a = "hello {0} welcome to {1}" 2 a1 = a.format("dlrb ...

  2. 精通Web Analytics 2.0 (12) 第十章:针对潜在的网站分析陷阱的最佳解决方案

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第十章:针对潜在的网站分析陷阱的最佳解决方案 是时候去处理网站分析中最棘手的一些问题了,然后获得属于你的黑带,这是成为分析忍者的 ...

  3. MemberShip的 链接字符串的使用

    1.运行asp.net Sql Server注册工具:aspnet_regsql.exe,详细参见:http://msdn.microsoft.com/zh-cn/library/ms229862(v ...

  4. Django models模型(1)

    1)使用模型需要在INSTALLED_APPS中注册 2)模型字段(字段类型和字段选项) 1.字段类型 常用: CharField,TextField: 对应字符串对象 DateTimeField和D ...

  5. 02-body标签中相关标签-1

    主要内容: 字体标签: h1~h6.<font>.<u>.<b>.<strong><em>.<sup>.<sub> ...

  6. springmvc启动时报错:找不到类ContextLoaderListener:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis ...

  7. RACSignal常见用法

    RACSignal 两种用法, 1:异步操作,一般创建signal的时候写逻辑,然后通过subscribeNext拿到异步执行的结果 2:监听的属性的变化,及时给出回应,一般赋值的时候用RACObse ...

  8. MySQL5.7 并行复制配置

    转自:https://www.cnblogs.com/langdashu/p/6125621.html [MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7 一.缘由: 某天看到主从 ...

  9. 拓展Scene视图——场景编辑Vector2/3

    Test.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class ...

  10. git使用 从远程库克隆和更新到本地

    从远程库克隆到本地. git clone git@github.com:kingbook/Framework.git 或 git clone http://github.com/kingBook/Fr ...