原创 對Java hashCode的學習

在《Effective Java》中寫道:在每個覆蓋了equals方法的類中,都必須覆蓋hashCode方法。可見hashCode方法是非常重要的。編寫hashCode方法要遵循兩點原則: (a)相等的對象必須擁有相等的散列碼;

原创 1071. Greatest Common Divisor of Strings/智力題

題目描述 For strings S and T, we say "T divides S" if and only if S = T + ... + T  (T concatenated with itself 1 or mor

原创 函數遞歸調用時變量的變化情況

以一道PAT題爲例,題目:點擊這裏。1053. Path of Equal Weight (30) 題目大意:求從根節點到葉節點權值和等於給定數S的所有路徑,輸出權值。所有的路徑按非遞增輸出。路徑a小於路徑b表示a輸出的權值序列小

原创 1030 Travel Plan (30分)(Java)

題目描述 AC代碼 import java.util.*; public class Main{ static Scanner scan=new Scanner(System.in); static class Graph{

原创 543. Diameter of Binary Tree / 遞歸

題目描述 Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tre

原创 Is it a tree?

題目鏈接:https://www.nowcoder.com/practice/1c5fd2e69e534cdcaba17083a5c56335?tpId=40&tqId=21365&tPage=2&rp=2&ru=/ta/kaoy

原创 最短路徑之Dijkstra算法詳解

注:本文總結自《算法筆記》 介紹 “迪傑斯特拉算法”,解決單源最短路問題,即給定圖G和起點s,計算s到達其他每個頂點的最短距離的問題。 基本思想:對圖G(V,E)設置集合S,存放已被訪問的頂點,然後每次從集合V-S(V減S)中選擇

原创 PAT Dijkstra相關題目

如果對Dijkstra算法不太瞭解,參見我的另一篇博文:最短路徑之Dijkstra算法。 1003 Emergency (25分) 題目鏈接 分析 常規的Dijkstra求解最短路徑的題,只不過添加了“第二標尺”——點權,並要求輸

原创 BFS/DFS解決隱式圖/樹問題

1.前言 隱式圖是僅給出初始結點、目標結點以及生成子結點的約束條件(題意隱含給出),要求按擴展規則應用於擴展結點的過程,找出其他結點,使得隱式圖的足夠大的一部分編程顯式,直到包含目標結點爲止。——百度百科 其中解決隱式圖問題的

原创 階乘(最大公約數與質數判斷)

題目鏈接:https://ac.nowcoder.com/acm/contest/4784/B 題目描述 解析 一開始真的就是去求階乘,發現即使n很小,n!也可以很大。然後我以爲把n!控制在long long int數據內就可

原创 對Java equals方法的理解

最近在系統的學習java,發現確實很多地方都與C++很不一樣,這讓曾經癡迷於C++的我很難適應。但是沒辦法,要交課程報告,也只能好好學下。 發現java中的Obeject類定義了equals這個方法,爲什麼不能像C++一樣直接用=

原创 路徑條數/動態規劃

題目描述 棋盤上 AAA 點有一個過河卒,需要走到目標 BBB 點。卒行走的規則:可以向下、或者向右。同時在棋盤上 CCC 點有一個對方的馬,該馬所在的點和所有跳躍一步可達的點稱爲對方馬的控制點。因此稱之爲“馬攔過河卒”。 棋盤用

原创 Java實現鼠標繪製多邊形並判斷鼠標打點是否在多邊形內

前言 在GIS(地理信息管理系統)中,判斷一個座標是否在多邊形內部是個經常要遇到的問題。乍聽起來還挺複雜。根據W. Randolph Franklin 提出的PNPoly算法,只需區區幾行代碼就解決了這個問題。PNPoly算法用來

原创 C語言實現凸包Graham_scan算法

算法就不介紹了,其他地方應該也搜得到。 如何判斷三點A, B, C連線是逆時針? (1) 通過判斷C在AB連線上方還是下方判斷,但需要根據斜率的正負,A, B位置關係分類討論,比較麻煩。 (2) 通過計算向量叉積的方法。 在一般的

原创 十進制轉其他進制

衆所周知,十進制轉其他進制使用的算法是除基取餘法。 代碼描述就是: int z[50],cnt=0; do{ z[cnt++]=y%q; //轉爲q進制數 y/=q; }while(y!=0); 這樣z數組從高位z[num