原创 4、只出現一次的數字

使用異或操作進行判定,異或操作滿足結合律和交換律,相同得0,任何數異或0得其本身,將所有數字進行異或最終能夠返回出現一次得數字。 int SignalNumber(int *nums,int numsSize) { int re

原创 10、打家劫舍

需要使用動態規劃,假設不偷竊k房間,偷竊的總金額爲前k-1間房間的綜和,偷竊第k間房間,偷竊的總金額爲前k-2間房屋的總金額與第k間房間的金額之和。 int rob(int* nums, int numsSize){ if

原创 1.X的平方根

二分查找:設定查找的上下邊界,(初始可以上邊界爲X,下邊界爲0).在二分查找的每一步中,比較中間元素mid的平方與X的關係,並通過比較的結果調整上下界的範圍。 int mySqrt(int x){ int low = 0, hi

原创 9、環形鏈表

使用快慢指針,在環形鏈表內部,快指針遲早會追上慢指針。 bool hasCycle(struct ListNode *head) { if(head == NULL || head->next == NULL)

原创 2、pow(x,n)計算X的n次冪

例如計算x的77次方: double myPow(double x, int n){ double res = 1.0; for(int i = n;i!=0;i/=2) //貢獻初始值爲x {

原创 7、迴文鏈表

使用快慢指針,當快指針到達表尾的時候,慢指針在鏈表中部,將鏈表的後半部分進行倒置,與前半部分進行比較,相等則爲迴文鏈表。 鏈表的倒置部分:例如1>2>3>4>3>2>1 相當於是pre(前節點)>slow(當前節點)>next(下個節點)

原创 8、爬樓梯

需要使用動態規劃+滾動數組,滾動數組每次使用固定的幾個空間,來達到壓縮,節省儲存空間的目的,主要用在遞推和動態規劃中。 int climbStairs(int n){ int i; int *dp = (int *)ma

原创 3、兩數之和

快速排序+二分查找:   typedef struct NumsArray{ //兩元素比較函數 int val; int idx; }NumsArray; int compare(const void *

原创 5、最短無序子數組

使用快排後經過一趟循環尋找排序後數組與之前數組不同的數字的下標。 /*比較函數*/ int compare(const void *p1,const void *p2) { return *(int *)p1 - *(int *

原创 11、二叉樹的直徑

兩個葉子節點之間的路徑 = 根節點左右兒子的深度之和 ; 節點的深度是節點左右子樹的節點深度+1---max(L,R),LR是左右節點深度; 一顆二叉樹的直徑長度是任意兩個節點路徑長度的最大值,可能這條路徑不會穿過根節點。路徑的長度爲經過

原创 6、有效的括號

使用入棧出棧操作,當入棧元素與棧頂元素相同則將棧頂元素出棧,例如遇到左括號‘(’,‘[’,’{’,則將其入棧等待配對出棧,遇到右括號若與棧頂元素匹配,則出棧。 bool isValid(char * s){ int len =

原创 迴文判定

判定一個整型數字是否是迴文,有兩種判定方法: 方法一:判定倒過來的數字是否等於原數字 int main() { int n, t1, t2 = 0, tmp; printf("請輸入一個數字:"); scanf_s("%d", &

原创 交叉編譯c文件的問題

在設置了交叉編譯的環境變量以後,我們可以使用命令 $ arm-linux-gnueabihf-gcc <待編譯文件.c> -o <輸出文件名> 但是在編譯的時候可能還是會出現一些問題,比如說: bash: /home/zy/ArmW

原创 C++之冒泡排序(字符串)

#include<iostream> using namespace std; void sort(char *name[], int n) {     char *tmp;     int i, j;     for (i = 0;i

原创 C++之冒泡排序法(數組)

#include<iostream> using namespace std; void selectsort(int arr[], int n) {     int i, j, tmp;     for (i = 0;i < n -