直接寫遞歸方法了:
public boolean check(String s, char c){
if(1==s.length()){
return s.charAt(0) == c;
}
else{
return check(s.subString(1,s.length()), c);
}
㈡ java十大演算法
演算法一:快速排序演算法
快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來。
快速排序使用分治法(Divide and conquer)策略來把一個串列(list)分為兩個子串列(sub-lists)。
演算法步驟:
1 從數列中挑出一個元素,稱為 "基準"(pivot),
2 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱為分區(partition)操作。
3 遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,但是這個演算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
演算法二:堆排序演算法
堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序演算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
堆排序的平均時間復雜度為Ο(nlogn) 。
演算法步驟:
創建一個堆H[0..n-1]
把堆首(最大值)和堆尾互換
3. 把堆的尺寸縮小1,並調用shift_down(0),目的是把新的數組頂端數據調整到相應位置
4. 重復步驟2,直到堆的尺寸為1
演算法三:歸並排序
歸並排序(Merge sort,台灣譯作:合並排序)是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。
演算法步驟:
1. 申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合並後的序列
2. 設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
3. 比較兩個指針所指向的元素,選擇相對小的元素放入到合並空間,並移動指針到下一位置
4. 重復步驟3直到某一指針達到序列尾
5. 將另一序列剩下的所有元素
㈢ JAVA演算法,判斷年月的連續性
看不明白,同年的話就是每個月都是連續的么?
不同年的呢,?
2050-12特殊年月是何意?
publicstaticbooleanfindThree(String[]years){
booleanflag=false;
all:for(inti=0;i<years.length;i++){
intnum=0;
for(intj=0;j<years.length;j++){
if(years[i].equals(years[j]))
num++;
if(num==3)
flag=true;
breakall;
}
}
returnflag;
}
publicstaticbooleantabCheck(String[]years){
//System.out.println(years[i].substring(0,4));
booleanflag=false;
for(inti=0;i<years.length-1;i++){
System.out.println(years[i].substring(0,4));
System.out.println(years[i].substring(6,7));
if(years[i].substring(0,4).equals(years[i+1].substring(0,4))
&&Integer.valueOf(years[i+1].substring(6,7))
-Integer.valueOf(years[i].substring(6,7))>1)
flag=true;
break;
}
returnflag;
}
publicstaticvoidmain(String[]args){
String[]years={"2012-01","2012-04","2012-05","2012-06","2012-07","2050-12"};
if(tabCheck(years)||findThree(years))
System.out.println("不合格");
else
System.out.println("合格");
}
//////////////////////////////////////////////////////////////////////
//如果只有兩組年月的話,只有兩種情況了,一種是同年隔一月,
//一種是隔年首尾相接
publicbooleanIsNext(String[]years){
Arrays.sort(years);
if(years[0].substring(0,4).equals(years[1].substring(0,4))){
if(Integer.valueOf(years[1].substring(6,7))-Integer.valueOf(years[0].substring(6,7))==1)
returntrue;
}elseif(Integer.valueOf(years[1].substring(0,4))-Integer.valueOf(years[0].substring(0,4))==1&&
Integer.valueOf(years[0].substring(6,7))==12&&Integer.valueOf(years[1].substring(6,7))==1){
returntrue;
}
returnfalse;
}
㈣ java常見gc演算法有哪些
1:標記—清除
Mark-Sweep
過程:標記可回收對象,進行清除
缺點:標記和清除效率低,清除後會產生內存碎片
2:復制演算法
過程:將內存劃分為相等的兩塊,將存活的對象復制到另一塊內存,把已經使用的內存清理掉
缺點:使用的內存變為了原來的一半
進化:將一塊內存按8:1的比例分為一塊Eden區(80%)和兩塊Survivor區(10%)
每次使用Eden和一塊Survivor,回收時,將存活的對象一次性復制到另一塊Survivor上,如果另一塊Survivor空間不足,則使用分配擔保機制存入老年代
3:標記—整理
Mark—Compact
過程:所有存活的對象向一端移動,然後清除掉邊界以外的內存
4:分代收集演算法
過程:將堆分為新生代和老年代,根據區域特點選用不同的收集演算法,如果新生代朝生夕死,則採用復制演算法,老年代採用標記清除,或標記整理
面試的話說出來這四種足夠了
㈤ 求Java常用演算法和經典演算法
java.util.Arrays中包含了很多演算法你可以看一看,jdk安裝的時候就有提供源代碼的。
㈥ 求java識別三角形,圓形,方形的具體演算法和原理。
首先圖片的背景和圖形的顏色肯定是不一樣的,圖片是由像素組成的(這個概念很重要),,第一步區分背景和圖形的顏色,保存背景的顏色,,第二步創建一個二維數組,這個二維數組對應於這個圖片,你比如說,我這個圖片是10*10大小的,然後我就把我這個數組保存是100*100的,即每隔0.1我取一下圖片的像素值,判斷這個像素值和背景是否一樣,如果一樣,那麼數組的對應位置就存儲0,否則存儲1,,,第三步,通過Java代碼控制滑鼠遍歷圖片,一行一行的遍歷,取像素值,與背景的像素對比,存入數組,遍歷之後二維數組就只是存儲的0和1(0代表背景,1代表圖形),,第四步,把所有為1的二維數組元素對應的坐標取出來,寫個方法判斷一下,相當於數軸知道X和Y了,你判斷一下圖形的形狀,應該不難。。。而且圖形就三個,,不難實現,,樓主可以試試
㈦ 利用Java判斷一個數是否是素數的演算法
//利用Java判斷一個數是否是素數的演算法
boolean f(int a){
boolean ean = true;
for(int i=2;i< Math.sqrt(a);i++){ //Math.sqrt 是調用Math類中的sqrt方法,求一個數的平方根
if(a%i==0){
ean = false;
break;
}
}
return ean;
}
㈧ 在Java中,設計一個演算法,判斷一個算術表達式中的括弧是否配對。
演算法:
String str="5+(4-3))" 表達式
char kuohao[]; 用作括弧堆棧
掃描str中的字元
1如果是(則入棧
2如果是)
a如果戰不空出棧
b如果棧空,不匹配。演算法結束
最後棧空則匹配
下面是我的實現
public class biaodashi {
public static void main(String args[])
{
int top=0;//堆指針
boolean end=true;//不匹配時只輸出一次
char stack[]=new char[100];//存括弧
String biaoda="(((1+(2)-6))";//表達式
char biao[]=biaoda.toCharArray();//將字元串轉化成字元數組
System.out.println("表達式: "+biaoda);
for(int i=0;i<biao.length&&end;i++)//遍歷表達式中所有字元
{
if(biao[i]=='(')//如果是(則入棧
{
stack[top]='(';
top++;
}
else if(biao[i]==')')//如果是)則出戰
{
if(!(top==0))
top--;
else
{
System.out.println("括弧不匹配");
end=false;
}
}
}//除循環兩種可能
if(top==0&&end)
System.out.println("括弧匹配");//出循環stack空
else if(top!=0&&end)
System.out.println("括弧不匹配");//出循環時stack不空
}
}
㈨ 求 關於java 密碼判斷的一個演算法
可以考慮把每個字元加入一個set裡面(藉助set的不重復特性)
最後檢測set.length,如果為>6,那麼就符合,否則false
偽代碼如下
1)Integer.parseInt()如果能成功,就說明全部為數字,出錯
2)加入set,
Set<String> set = new TreeSet<String>();
for(char item:password){
set.add(item);
3)判斷set.size == str.length??相等,說明沒有重復的字元,不相等說明有一部分重復了,失敗
完整代碼如下所示:
import java.util.Set;
import java.util.TreeSet;
public class Validator {
public static void main(String[] args) {
String password = "123456aa";
validatePassword(password);
}
private static boolean validatePassword(String password) {
if(password.length() < 6){
System.out.println("Password is too short");
return false;
}
try{
Integer.parseInt(password);
System.out.println("Password can't be all digits!");
return false;
}catch(NumberFormatException nbFmtExp){
Set<String> set = new TreeSet<String>();
char[] pwdArray = password.toCharArray();
for(int i = 0, len = pwdArray.length; i < len; i++){
if(!set.contains(String.valueOf(pwdArray[i]))){
set.add(String.valueOf(pwdArray[i]));
}
}
if(set.size() != password.length()){
System.out.println("Password contains plicate charactor!");
return false;
}
return true;
}
}
}
㈩ java中的演算法,一共有多少種,哪幾種,怎麼分類。
就好比問,漢語中常用寫作方法有多少種,怎麼分類。
演算法按用途分,體現設計目的、有什麼特點
演算法按實現方式分,有遞歸、迭代、平行、序列、過程、確定、不確定等等
演算法按設計范型分,有分治、動態、貪心、線性、圖論、簡化等等
作為圖靈完備的語言,理論上」Java語言「可以實現所有演算法。
「Java的標准庫'中用了一些常用數據結構和相關演算法.
像apache common這樣的java庫中又提供了一些通用的演算法