//整數的二進位表達中有多少個1public class CountOne{ //方法一public static int Count01(int n){int res=0;while(n!=0){res+=n&1;n>>>=1;}return res;} //方法二 public static int Count02(int n) { int sum=0; while(n!=0) { n=n&(
//通過位元運算實現兩個數的加、減、乘、除public class BitSuan{ //(1)加法運算 public static int add(int a,int b) { int sum=a; while(b!=0) { //a與b無進位相加 sum=a^b; b=(a&b)<<1; a=sum; } return sum; } /
//找到兩個排序數組的中位元public class GetMedianTwoArr{//k為中位元的位置 public static double findKth(int a[], int m, int b[], int n, int k){//always assume that m is equal or smaller than nif (m > n)return findKth(b, n, a, m, k);if (m == 0)return b[k - 1];if (k ==
//不用任何比較判斷找出兩個數中較大的數public class TwoNumWithoutJudge{ //判斷一個數的符號(返回0負數,1為正數) public static int GetSign(int x) { return ((x>>31)^1)&1; } //方法1 (局限性前提a與b不相等,可能溢出) public static int GetMax01(int a,int b) {
import java.util.*;//數組中的最長連續序列public class LongestSequence{//最長的連續序列 public static int longestConsecutive(int[]arr) { if(arr==null||arr.length==0) { return 0; } int max=1; //key 表示遍曆的某個數 value表示最長連續序列的長度
//排成一條線的紙牌博弈問題public class CardProblem{//暴力遞迴方法(時間複雜度O(2^n),空間複雜度O(n))public static int win01(int[]arr){if(arr==null||arr.length==0){return 0;}return Math.max(f(arr,0,arr.length-1),s(arr,0,arr.length-1));}//先選的最優函數public static int f(int[]arr,int
//二叉樹節點間的最大距離問題public class MaxDistanceOfTree{//二叉樹節點的定義public static class Node{public int value;public Node left;public Node right;public Node(int data){this.value=data;}}//獲得一個二叉樹兩個節點間的最大距離/** 最大子樹的長度為:左子樹最大長度+右子樹最大長度+1*/public static int
//通過有序數組產生平衡搜尋二叉樹public class generateBST{ //二叉樹節點的定義 public static class Node{ public int value; public Node left; public Node right; public Node(int data) { this.value=data; } } //產生平衡二叉搜尋樹