// 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. linux系统安全更新

    um --security upgrade 一.参考文档:  https://blog.csdn.net/ubuntu64fan/article/details/80927212 二.Linux主机定 ...

  2. spark基础知识介绍2

    dataframe以RDD为基础的分布式数据集,与RDD的区别是,带有Schema元数据,即DF所表示的二维表数据集的每一列带有名称和类型,好处:精简代码:提升执行效率:减少数据读取; 如果不配置sp ...

  3. log4js_Node.js中的日志管理模块使用

    { "appenders": [ // 下面一行应该是用于跟express配合输出web请求url日志的 {"type": "console" ...

  4. 02.centos6.4找不到ifcfg-eth0(静态ip配置)

    1.默认情况在/etc/sysconfig/network-scripts/目录下面找不到ifcfg-eth0文件,我们需要手动copy 1.1动态ip配置 #cp ifcfg-lo ifcfg-et ...

  5. 机器学习进阶-图片基本处理-ROI区域 1.img[0:200, 0:200]截取图片 2.cv2.split(对图片的颜色通道进行拆分) 3. cv2.merge(将颜色通道进行合并) 4 cur_img[:, :, 0] = 0 使得b通道的颜色数值为0

    1. 截取图片的部分区域img[0:200, 0:200], 读入的图片是ndarray格式 2. b, g, r = cv2.split(img)  # 对图片的颜色通道进行拆分 3.img = c ...

  6. too many connections 解决方法

    最近写javaee项目的时候,mysql报了too many connections的错误,百度的内容有一些有问题,所以我重新写一下我的解决方法. mysql -u root -p 回车输入密码进入m ...

  7. Linux文件的时间

    关于Linux文件的ctime.atime和mtime等几个时间的介绍,推荐<Linux的3个文件时间>比较不错,这篇文章已经介绍的比较全面了,但是本文对它做进一步的解释,并对一些情况进行 ...

  8. sass实战演练01 - 外部文件引用和变量

    SASS是什么? 目前前端开发中css已经是公认的”前端程序员必须掌握”的知识,最早的css编写都是手工一条条写出来的,工作量大.不利于维护. 而sass的存在使得css开发可以像写代码一样最终生成一 ...

  9. ASP.NET 身份验证机制

    ASP.NET提供了3种认证方式:windows身份验证:IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问.Forms验证          :用Cookie来保存 ...

  10. Hibernate 再接触 关系映射 一对一单向外键联合主键关联

    例子: Husband.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persiste ...