1、C++計時函數
// 計算時間函數
#include <ctime>
clock_t startTime = clock();
clock_t endTime = clock();
cout<<double(endTime-startTime)/CLOCKS_PER_SEC<<"s"<<endl;
// 計算乘方
#include<cmath>
int n = pow(10, 2);
// swap交換string兩個元素的位置
void reverse(string &s){
int n=s.size();
for(int i=0; i<n/2; i++)
swap(s[i], s[n-1-i]);
}
// 選擇排序
void selectionSort(int arr[], int n){
for(int i=0; i<n; i++){
int minIndex = i;
for(int j=i+1; j<n; j++)
if(arr[j] < arr[minIndex])
minIndex = j;
swap(arr[i], arr[minIndex]);
}
}
// 二分查找
int binarySearch(int arr[], int n, int target){
int l=0, r=n-1;
while(l<=r){
int mid = l+(r-l)/2;
if(arr[mid]==target) return mid;
if(arr[mid]>target) r=mid-1;
else l=mid+1;
return -1;
}
// int 2 string
string intToString(int num){
s = "";
while(num){
s += "0" + num%10;
num /= 10;
}
reverse(s);
return s;
}
// 判斷素數
bool isPrime(int x){
for(int i=2; i*i<=x; i++){
if(x % i == 0) return false
}
return true;
}
// 頭文件寫法示例
#ifndef STRIKECODE_MYUTIL_H
#define STRIKECODE_MYUTIL_H
#include <ctime>
#include <cassert>
using namespace std;
namespace MyUtil{
int *generateRandomArray(int n, int rangeL, int rangeR){
assert(n>0 && rangeL<=rangeR);
int *arr = new int[n];
srand(time(NULL));
for(int i=0; i<n; i++)
arr[i] = rand() % (rangeR-rangeL) + rangeL;
return arr;
}
}
#endif
// 歸併排序
void __merge(int arr[], int l, int mid, int r, int aux[]){
int i=l, j=mid+1;
for(int k=l, k<=r; k++){
if(i>mid) {arr[k]=aux[j]; j++;}
else if(j>r) {arr[k]=aux[i]; i++;}
else if(aux[i]<aux[j]) {arr[k]=aux[i], i++;}
else {arr[k]=aux[j]; j++;}
}
}
void mergeSort(int arr[], int n){
int *aux = new int[n];
for(int i=0; i<n; i++)
aux[i]=arr[i];
for(int sz=1; sz<n; sz += sz)
for(int i=0; i<n; i+=sz+sz)
__merge(arr, i, i+sz-1, min(i+sz+sz-1, n-1), aux);
}
#判斷空指針和vector方向迭代器,鏈表反向打印
#include <vector>
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> v;
ListNode* p=head;
while(p!= nullptr){
v.push_back(p->val);
p=p->next;
}
return vector<int>(v.rbegin(), v.rend());
}
};