1. 程式人生 > >常見演算法題分析---java實現(一)

常見演算法題分析---java實現(一)

第一次部落格,有錯誤勿噴,謝謝!

一,如何不用比較運算子,比較兩個數的大小

 分析:在計算機中判斷兩個數不用比較運算子,一般兩個數做減法 a-b,然後再去可以使用位運算子來進行判斷這個數的正負,從而知道大小,有兩個位運算,>>和>>>,>>代表的是帶符號右移,什麼意思?在計算機中正數的符號位是0,負數的符號位是1,如果一個數11000101>>7= 11111111,01101101>>7= 00000000,>>>是不帶符號右移,右移幾位在前面補0即可。這道題在做完減法之後,首先判斷結果為不為0,為零即兩個數相等,否則可以使用帶符號右移31位(預設位int,在java中32位)如果是負數則全是1,b大於a,如果位正數則全為0,a大於b。補充:左移只有<<(補0即可),沒有<<<,

public class A {
	private static void getMax(int a, int b) {
		int index=a-b;
		if(index==0)
			System.out.println("same");
		else{
			if(sign(a)==false && sign(index)==false)
				System.out.println("b大");
			else
				System.out.println("a大");
		
		}
	}
	private static boolean sign(int index) {  //判斷一個數的正負
		int sc=index>>31;
		if(sc==0)
			return true; //正數
		else
			return false; //負數
	}
	
}


相關推薦

常見演算法分析---java實現

第一次部落格,有錯誤勿噴,謝謝! 一,如何不用比較運算子,比較兩個數的大小  分析:在計算機中判斷兩個數不用比較運算子,一般兩個數做減法 a-b,然後再去可以使用位運算子來進行判斷這個數的正負,從而知道大小,有兩個位運算,>>和>>>,>

劍指offer演算法分析與整理

下面整理一下我在刷劍指offer時,自己做的和網上大神做的各種思路與答案,自己的程式碼是思路一,保證可以通過,網友的程式碼提供出處連結。 目錄 1、陣列中的逆序對 在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸

Java 筆試題的演算法之io程式設計

題目:刷卡記錄:名字-金錢    讀取並找出刷卡次數最多,單筆消費最多 程式碼:import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import jav

《推薦系統》基於使用者和Item的協同過濾演算法分析實現Python

開啟微信掃一掃,關注《資料與演算法聯盟》1:協同過濾演算法簡介2:協同過濾演算法的核心3:協同過濾演算法的應用方式4:基於使用者的協同過濾演算法實現5:基於物品的協同過濾演算法實現一:協同過濾演算法簡介    關於協同過濾的一個最經典的例子就是看電影,有時候不知道哪一部電影是

仿QQ聊天軟體java實現

之前學java通訊的時候寫過簡單的通訊程式,但比較簡陋,於是重新寫了一個仿照QQ的聊天軟體,主要在介面上做了優化,增加了一些功能。實現的功能有註冊、登入、好友列表、分組、黑名單、新增好友、群列表、建立群、新增群、聊天氣泡、傳送文字、圖片、檔案、表情。 好了先上圖看下效果:

紅黑樹演算法的思想與實現

紅黑樹 是一顆二叉搜尋樹:樹中每一個節點不是黑色就是紅色。可以把一顆紅黑樹視為一顆擴充二叉樹,用外部節點表示空指標。。。 有如下特性: 1.根節點和所有外部節點的顏色是黑色。 2.從根節點到外部節點的途中沒有連續兩個節點的顏色是紅色。 3.所有從根節點到外部節點的路徑上都有

高階Java工程師必備 ----- 深入分析 Java IO BIO

BIO程式設計 最原始BIO 網路程式設計的基本模型是C/S模型,即兩個程序間的通訊。 服務端提供IP和監聽埠,客戶端通過連線操作想服務端監聽的地址發起連線請求,通過三次握手連線,如果連線成功建立,雙方就可以通過套接字進行通訊。 傳統的同步阻塞模型開發中,ServerSocket負責繫結IP地址,啟動

Java常用的八種排序演算法與程式碼實現:氣泡排序法、插入排序法、選擇排序法

這三種排序演算法適合小規模資料排序 ---   共同點:基於比較,時間複雜度均為O(n2),空間複雜度均為O(1)(原地排序演算法)   不同點:插入排序和氣泡排序是穩定的排序演算法,選擇排序不是 ---   穩定排序演算法:可以保持數值相等的兩個物件,在排序之

python常見排序演算法實現

在Python程式設計的實踐中,我們往往會遇到排序問題,比如在對搜尋引擎搜尋結果的排序(沒有排序就沒有Google、baidu等搜尋引擎的存在),當然,這樣的例子數不勝數。我大學中的必修課程《資料結構》

Java中String、StringBuilder、StringBuffer常用源碼分析及比較:String源碼分析

array string類 都是 epo sys 匹配字符串 bound 地址 簡單 String: 一、成員變量: /** The value is used for character storage. */ private final char value[

java集合類源碼分析之List

col 實現類 並且 link arraylist oar print 適用於 for   首先分析一下集合與數組的區別:1.java中的數組一般用於存儲基本數據類型,而且是靜態的,即長度固定不變,這就不適用於元素個數未知的情況;2.集合只能用於存儲引用類型,並且長度可變,

Java併發:volatile的實現原理 Java併發Java記憶體模型乾貨總結

synchronized是一個重量級的鎖,volatile通常被比喻成輕量級的synchronized volatile是一個變數修飾符,只能用來修飾變數。 volatile寫:當寫一個volatile變數時,JMM會把該執行緒對應的本地記憶體中的共享變數重新整理到主記憶體。 volatile讀:當讀一

演算法設計與分析——動態規劃矩陣連乘

動態規劃——Dynamic programming,可以說是本人一直沒有啃下的骨頭,這次我就得好好來學學Dynamic programming. OK,出發! 動態規劃通常是分治演算法的一種特殊情況,它一般用於最優化問題,如果這些問題能夠: 1.能夠分解為規模更小的子問題 2.遞迴的

資料結構演算法/最大子序列維陣列中和最大的連續子序列

1首先看一下 最大子序列。 最大子序列是要找出由陣列成的一維陣列中和最大的連續子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,達到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已經看出來了,找最大子序列的方法很簡單,只要前i項的和還沒有

Java關於傳統的excel匯出的實現

匯出的excel如下: 如果沒有特殊的格式啥的要求,此方法已經滿足,如果遇到標題或者定製的那種內容,就需要改造此方法!注意一下,這個方法只適合簡單的匯出使用。如果那種定製模板的匯出,在下一篇文章中我會有給出方法! 第一,控制層(controller層)的程式碼如下: /** * 列

JAVA高階基礎8---Set的典型實現:HashSet

HHashSet 注:更多詳細方法請自行在 API 上查詢 HashSet 是由hash表(hashMap)支援,不保證元素的迭代順恆久不變,允許存在null值,元素不允許重複,同時,不是執行緒安全的 HashSet是基於HashMap實現的。   &n

spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現

SpringBootMonitor spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一) spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二) spring-boot-ad

基於java的微信小程式的實現專案介紹

一,專案介紹 佐倉短視訊是一個以java為後臺編寫的短視訊類的微信小程式專案 使用者可以實現登入,註冊,視訊檢視,視訊上傳,個人資訊檢視,頭像上傳等功能 二,技術選型和效果預覽 本專案後端採用spring boot +spring data jpa的技術實現

基於《仙劍奇俠傳柔情版》利用Java的簡單實現

基於《仙劍奇俠傳柔情版》利用Java的簡單實現(一) 2018-12-01 23:55:36   by Louis  一,新建一個類GameFrame.class,具體程式碼如下: package firstDemo; import javax.swing.JF

JAVA 學習:16進位制字串自增的實現

JAVA學習系列,並不是從基礎去講java的知識,而是把我在學習或是工作中,一些思想、邏輯總結出來。 原先在工作中,因為測試的需要,經常要往資料庫中批量的插資料。而表的主鍵用的是UUID,是由16進位制字元加“-”組成的,還有裝置的mac地址是由16進位制字元加“:”組成的,那個時候,我剛學ja