天天看點

java面試代碼題

一、Java中的經典算法之冒泡排序

原理:比較兩個相鄰的元素,将值大的元素交換至右端。

思路:依次比較相鄰的兩個數,将小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,将小數放前,大數放後。

然後比較第2個數和第3個數,将小數放前,大數放後,如此繼續,直至比較最後兩個數,将小數放前,大數放後。重複第一趟步驟,直至全部排序完成。

由此可見:N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,是以可以用雙重循環語句,外層控制循環多少趟,内層控制每一趟的循環次數。

冒泡排序的優點:每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出一個較大值。如上例:第一趟比較之後,排在最後的一個數一定是最大的一個數,

第二趟排序的時候,隻需要比較除了最後一個數以外的其他的數,同樣也能找出一個最大的數排在參與第二趟比較的數後面,第三趟比較的時候,

隻需要比較除了最後兩個數以外的其他的數,以此類推……也就是說,沒進行一趟比較,每一趟少比較一次,一定程度上減少了算法的量。

[Java] 純文字檢視 複制代碼

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

/*

* 冒泡排序

*/

public

class

BubbleSort {

  

public

static

void

main(String[] args) {

    

int

[] arr={

6

,

3

,

8

,

2

,

9

,

1

};

    System.out.println(

"排序前數組為:"

);

    

for

(

int

num:arr){

      System.out.print(num+

" "

);

    }

    

for

(

int

i=

;i<arr.length-

1

;i++){

//外層循環控制排序趟數

      

for

(

int

j=

;j<arr.length-

1

-i;j++){

//内層循環控制每一趟排序多少次

        

if

(arr[j]>arr[j+

1

]){

          

int

temp=arr[j];

          arr[j]=arr[j+

1

];

          arr[j+

1

]=temp;

        }

      }

    }

    System.out.println();

    System.out.println(

"排序後的數組為:"

);

    

for

(

int

num:arr){

      System.out.print(num+

" "

);

    }

  }

}

二、java去重複字元串

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

/**

* @方法一:先把字元串通過空拆分為數組,再利用list集合的contains方法去數組重複項添加數組項

* @param str

* @return

*/

public

static

String strDuprRem(String str){

String[] strArr =str.split(

""

);

if

(strArr.length ==

) {

return

null

;

}

List<String> list =

new

ArrayList<String>();

StringBuffer sb =

new

StringBuffer();

for

(

int

i=

;i < strArr.length;i++){

if

(!list.contains(strArr[i])){

list.add(strArr[i]);

sb.append(strArr[i]+

""

);

}

}               

return

sb.toString().substring(

, sb.toString().lastIndexOf(

""

));               

}

/**

* @方法二:先把字元串通過字元串的toCharArray變為字元數組,

* 再利用循環刻錄字元數組每一項内容,利用循環比較刻錄的每一項内容與數組每一項内容比較,相等就把内容置空,最後去處空格

* @param str

* @return

*/

public

static

String strDuprRem2(String str){

char

[] charArr =str.toCharArray();

if

(charArr==

null

){

return

str;

}

if

(charArr.length <

2

) {

return

str;

}

//雙層循環把字元數組重複項置空

for

(

int

i=

;i<charArr.length;i++){

char

tmp =charArr[i];

if

(tmp!=

' '

){

for

(

int

j=i+

1

;j<charArr.length;j++){

if

(tmp==charArr[j]){

charArr[j]=

' '

;

}       

}

}

}

//字元數組去空

StringBuffer sb =

new

StringBuffer();

for

(

int

t=

;t<charArr.length;t++){

if

(charArr[t]!=

' '

){

sb.append(charArr[t]);

}               

}

return

sb.toString();               

}

/**

* @方法三:先把字元串通過字元串的toCharArray變為字元數組,

* 再利用循環把字元數組每一項添加到set集合,由于set集合内容不允許重複進而到達去重的目的,

* 添加進集合的時候要做空格判斷空格項不能添加進集合,周遊set集合用StringBuffer轉為字元串,

* 但是set集合是無序,看到結果第三種内容順序跟第一種不一樣,要是有順序要求此種方法不可用

* @param str

* @return

*/

public

static

String strDuprRem3(String str){

char

[] charArr =str.toCharArray();

if

(charArr==

null

){

return

str;

}

if

(charArr.length <

2

) {

return

str;

}

Set<String> hash =

new

HashSet<String>();

//字元數組循環添加進set集合

for

(

int

i=

;i<charArr.length;i++){

if

(charArr[i]!=

' '

){   

//字元數組去空并添加到set集合

hash.add(String.valueOf(charArr[i]));

}

}

//                //set集合周遊轉為字元串

StringBuffer sb =

new

StringBuffer();

for

(String laststr:hash){

sb.append(laststr);

}

return

sb.toString();               

}

public

static

String reverse3(String s)

{

char

[] array = s.toCharArray();

//将string類型參數轉化為char[]類型參數

String reverse =

""

//注意這是空串,不是null

for

(

int

i = array.length -

1

; i >=

; i--)

reverse += array[i];

return

reverse;

}

String[] array = {

"a"

,

"b"

,

"c"

,

"c"

,

"d"

,

"e"

,

"e"

,

"e"

,

"a"

}; 

List<String> result =

new

ArrayList<>(); 

boolean

flag; 

for

(

int

i=

;i<array.length;i++){ 

flag =

false

for

(

int

j=

;j<result.size();j++){ 

if

(array[i].equals(result.get(j))){ 

flag =

true

break

if

(!flag){ 

result.add(array[i]); 

String[] arrayResult = (String[]) result.toArray(

new

String[result.size()]); 

System.out.println(Arrays.toString(arrayResult));

String[] array = {

"a"

,

"b"

,

"c"

,

"c"

,

"d"

,

"e"

,

"e"

,

"e"

,

"a"

}; 

List<String> list =

new

ArrayList<>(); 

list.add(array[

]); 

for

(

int

i=

1

;i<array.length;i++){ 

if

(list.toString().indexOf(array[i]) == -

1

){ 

list.add(array[i]); 

String[] arrayResult = (String[]) list.toArray(

new

String[list.size()]); 

System.out.println(Arrays.toString(arrayResult));

更多免費技術資料可關注:annalin1203