您的位置:首页 > 其它

存档

2015-06-15 23:49 78 查看
Plus One

1:

class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int takeOver = 1;
int n = digits.size();
for(int i = n - 1; i >= 0; --i){
digits[i] += takeOver;
if(digits[i] > 9 && i != 0){
digits[i] -= 10;
takeOver = 1;
}
else if(digits[i] <= 9){
return digits;
}
else{
digits[i] -= 10;
digits.insert(digits.begin(), 1);
}
}
return digits;
}
};


2:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int n = digits.size();
for (int i = n - 1; i >= 0; --i){
if(digits[i] == 9){
digits[i] = 0;
}
else{
digits[i]++;
return digits;
}
}
digits[0] = 1;
digits.push_back(0);
return digits;
}
};


Remove Duplicates from Sorted Array

1:

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int size = nums.size();
if(size == 0)
return 0;
int index = 0;
for (int i = 1; i < size; ++i){
if (nums[index] != nums[i])
nums[++index] = nums[i];
}
return index + 1;
}
};


2:

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() < 1)
return nums.size();
vector<int>::iterator iter1, iter2;
for(iter1 = nums.begin(), iter2 = nums.begin() + 1; iter2 != nums.end();){
if(*iter1 == *iter2)
iter2 = nums.erase(iter2);
else{
iter1++;
iter2++;
}
}
return nums.size();
}
};


3:

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(n <= 1)
return n;
int count = 0;
for(int i = 1; i < n; ++i){
if(nums[i] == nums[i - 1])
count++;
else
nums[i - count] = nums[i];
}
return n - count;
}
};


Remove Duplicates from Sorted Array II

1:

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(n <= 2)
return n;
vector<int>::iterator iter1, iter2, iter3;
for(iter1 = nums.begin(), iter2 = iter1 + 1, iter3 = iter1 + 2; iter1 != nums.end() && iter2 != nums.end() && iter3 != nums.end();){
if(*iter1 != *iter2){
++iter1;
++iter2;
++iter3;
}
else if(*iter1 == *iter2 && *iter2 != *iter3){
iter1 = iter3;
iter2 = iter1 + 1;
iter3 = iter2 + 1;
}
else if(*iter1 == *iter2 && *iter2 == *iter3){
vector<int>::iterator iter;
for(iter = iter3; iter != nums.end(); ++iter){
if(*iter != *iter1){
break;
}
}
iter1 = nums.erase(iter3, iter);
iter2 = iter1 + 1;
iter3 = iter2 + 1;
}
}
return nums.size();
}
};


2:

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(n <= 2)
return n;
int i = 1, j = 1;
int count = 1;
while(j < n){
if(nums[j] != nums[j - 1]){
count = 1;
nums[i++] = nums[j];
}
else{
if(count < 2){
nums[i++] = nums[j];
count++;
}
}
++j;
}
return i;
}
};


Rotate Image

1:

class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i = 0; i < n / 2; ++i){
for(int j = 0; j < n; ++j){
swap(matrix[i][j], matrix[n - 1 - i][j]);
}
}

for(int i = 0; i < n; ++i){
for(int j = i + 1; j < n; ++j){
swap(matrix[i][j], matrix[j][i]);
}
}
}
};


2:

class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
reverse(matrix.begin(), matrix.end());
for(int i = 0; i < matrix.size(); ++i){
for(int j = 0; j < i; ++j){
swap(matrix[i][j], matrix[j][i]);
}
}
}
};


anticlockwise_rotate:

class Solution {
public:
void anti_rotate(vector<vector<int>>& matrix) {
for(auto vi : matrix)
reverse(vi.begin(), vi.end());
for(int i = 0; i < matrix.size(); ++i){
for(int j = 0; j < i; ++j){
swap(matrix[i][j], matrix[j][i]);
}
}
}
};


Search in Rotated Sorted Array

class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size();
int first = 0, last = n - 1;
while(first <= last){
int mid = (first + last) / 2;
if(nums[mid] == target)
return mid;
if(nums[first] <= nums[mid]){
if(nums[first] <= target && nums[mid] > target){
last = mid - 1;
}
else{
first = mid + 1;
}
}
else{
if(nums[mid] < target && target <= nums[last]){
first = mid + 1;
}
else{
last = mid - 1;
}
}
}
return -1;
}
};


two sum
1:

class Solution {
public:
vector<int> twoSum(vector<int> &nums, int target) {
vector<int> numsCopy = nums;
sort(numsCopy.begin(), numsCopy.end());
int nLength = (int)numsCopy.size();
int index1 = 0, index2 = nLength - 1;
while(index1 < index2){
if(numsCopy[index1] + numsCopy[index2] == target)
break;
else if(numsCopy[index1] + numsCopy[index2] > target)
--index2;
else
++index1;
}
int result1, result2;
for(int i = 0; i < nLength; ++i){
if(nums[i] == numsCopy[index1]){
result1 = i + 1;
break;
}
}
for(int i = nLength - 1; i >= 0; --i){
if(nums[i] == numsCopy[index2]){
result2 = i + 1;
break;
}
}
if(result1 > result2){
swap(result1, result2);
}
vector<int> result{result1, result2};
return result;
}
};


2:

class Solution {
public:
vector<int> twoSum(vector<int> &nums, int target) {
map<int, int> mapping;
vector<int> result;
for(int i = 0; i < nums.size(); ++i){
mapping[nums[i]] = i;
}
for(int i = 0; i < nums.size(); ++i){
const int gap = target - nums[i];
if(mapping.find(gap) != mapping.end() && mapping[gap] > i){
result.push_back(i + 1);
result.push_back(mapping[gap] + 1);
break;
}
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: