1.LeetCode第一题 两数之和
以一个数为基准,再用目标数减去基准数得到他们的差值,再在数组中找这个差值。这个时候以数组存放的数值为key值,数值对应的数组下标为value值。利用哈希查找算法查找相应值的下标。
分别用C++和Pyhton做的:
vector<int> twoSum(vector<int> nums,int target)
{
unordered_map<int,int> hash;
vector<int> res;
for(int i=0;i<nums.size();i++){
if(hash.find(target-nums[i])!=hash.end()){
res.push_back(hash[target-nums[i]]);
res.push_back(i);
return res;
}
hash[nums[i]]=i;
}
return res;
}
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
hashTable={}
for _index,value in enumerate(nums):
if not value in hashTable:
hashTable[value]=_index
if target-value in hashTable:
if _index!=hashTable[target-value]:
return [hashTable[target-value],_index]
2.LeetCode 第202题 Happy Number
题意说对于某一个正整数,如果对其各个位上的数字分别平方,然后再加起来得到一个新的数字,再进行同样的操作,如果最终结果变成了1,则说明是快乐数,如果一直循环但不是1的话,就不是快乐数,那么现在任意给我们一个正整数,让我们判断这个数是不是快乐数
考虑用set记录所有出现过的数字,每次出现新的数字与set中的数字进行比较,查找是否已经存在,如果存在则跳出循环,该数不是快乐数;否则将该数加入set中。
使用C++和Python:
class Solution {
public:
bool isHappy(int n) {
unordered_set<int> mySet;
while(n!=1){
int t=0;
while(n){
t+=(n%10)*(n%10);
n/=10;
}
n=t;
if(mySet.count(n)) break;
else mySet.insert(n);
}
return n==1;
}
};
class Solution:
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
visited=set()
while n!=1:
n=sum(int(i)**2 for i in str(n))
if n in visited:
return False
else:
visited.add(n)
else:
return True
3.数组的学习
.数组名可以看做常量指针使用
数组名是数组首元素的地址
数组的地址和数组首元素的地址是相同的,但意义不一样。
a[n] <=>*(a+n) <==>*(n+a) <==> n[a]
指针可以当做数组名使用
int a[5]={0};
int * p=a;
数组作为函数参数时,编译器编译成指针,退化为指针
void func(int a[]) ==>void func(int *a) ==>void func(int*a,int a_size)
使用vector容器可以替代数组 int array[]。
一维数组的定义 vector<int> array;
vector<int> array(10,0); // 大小为10,初始值为0
添加数组元素 array.push_back(1);
删除数组元素 array.erase(array.begin(),array.begin()+2); //删除第 0 、1个元素
(a.begin(), a.end())则表示起始元素和最后一个元素之外的元素位置。
删除最后一个数据 array.pop_back();
插入数组元素 array.insert(array.end(),0); //在数组尾部后插入数据0
array.insert(array.begin(),0); //在数组第0个前插入数据0
数组的元素个数 array.size();
array.end(); //end操作返回的迭代器指向vector的“末端元素的下一个”,表明指向一个不存在的元素
数组元素从小到大排序
#include<algorithm>
sort(array.begin(),array.end());
数组元素从大到小排序
reverse(array.begin(),array.end());