【一週程式設計學習】--1.用雜湊思想實現LeetCode的第1題和第202題
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());