いくつかの典型的なアルゴリズム面接の質問に対する Java ソリューション

いくつかの典型的なアルゴリズム面接の質問に対する Java ソリューション

質問1:

  1. 公共 クラスtestClockwiseOutput {
  2. //行列を時計回りに印刷する 
  3.     
  4. @テスト 
  5. 公共  voidテスト(){
  6. int [][] num =新しい 整数[ 100 ][ 100 ];
  7. 整数n = 4 ;
  8. 整数カウント = 1 ;
  9.         
  10. ( int i = 0 ; i < n ; i++ )の場合{
  11. ( int j = 0 ; j < n ; j++ )の場合{
  12. num[i][j] = カウント++;
  13. }
  14. }
  15.         
  16. 出力(数値、 0 、n- 1 );
  17. }
  18.     
  19. 公共  void出力( int [][] num, int開始, int終了){
  20. (start>=end || end<= 0 )の場合戻り値:
  21. ( int i=start;i<=end;i++) {
  22. System.out.println(num[開始][i]);
  23. }
  24. ( int i=start+ 1 ;i<=end;i++) {
  25. System.out.println(num[i][end]);
  26. }
  27. ( int i=end- 1 ;i>=start;i--) {
  28. System.out.println(num[end][i]);
  29. }
  30. for ( int i=end- 1 ;i>start;i--){
  31. System.out.println(num[i][start]);
  32. }
  33. 出力(数値、開始+ 1 、終了- 1 );
  34. }
  35. }

質問2:

ソートされた配列と数値が与えられた場合、配列内の連続する要素の合計が指定された数値に等しいサブ配列を見つけます。

  1. // ソートされた配列と数値が与えられた場合、配列内の連続する要素の合計が指定された数値に等しいサブ配列を見つけます 
  2.     
  3. @テスト 
  4. 公共  voidテスト(){
  5. int [] num = { 1 2 2 3 4 5 6 7 8 9 };
  6. 整数合計 = 7 ;
  7. 数値、合計を求める。
  8. }
  9.     
  10. 公共  void findSum( int [] num, int sum){
  11. int左 = 0 ;
  12. int右 = 0 ;
  13.         
  14. ( int i = 0 ; i < num.length; i++) {
  15. int 現在の合計 = 0 ;
  16. 左 = i;
  17. 右 = i;
  18. (curSum<sum) {
  19. curSum += num[右++];
  20. }
  21. (現在の合計==合計)の場合{
  22. ( int j=left;j<right;j++) {
  23. System.out.print(num[j]+ " " );
  24. }
  25. システム出力のprintln();
  26. }
  27. }
  28. }

質問3:

  1. //すべての文字列は文字配列で構成されています 
  2.     
  3. @テスト 
  4. 公共  voidテスト(){
  5. //char[] cs = {'a','b','c','d','e'};  
  6. char [] cs = { 'a' 'b' 'c' };
  7. int長さ = cs.length;
  8. 再帰スワップ(cs, 0 ,長さ);
  9. }
  10.     
  11. 公共  void swap( char [] cs, intインデックス1, intインデックス2) {
  12. char temp = cs[インデックス1];
  13. cs[インデックス1]=cs[インデックス2];
  14. cs[インデックス2]=temp;
  15. }
  16.     
  17. 公共  void recursionSwap( char [] cs, int start, int length){
  18. (開始>=長さ- 1 )の場合{
  19. 印刷(cs);
  20. 戻る;
  21. }
  22. ( int i=start;i<length;i++) {
  23. swap(cs,start,i);
  24. recursionSwap(cs,開始+ 1 ,長さ);
  25. swap(cs,start,i);
  26. }
  27. }
  28.     
  29. 公共  void print( char []cs) {
  30. ( int i = 0 ; i < cs.length; i++) {
  31. System.out.print(cs[i]);
  32. }
  33. システム出力のprintln();
  34. }

質問4:

  1. //配列要素の最小数 
  2.     
  3. @テスト 
  4. 公共  voidテスト(){
  5. int [] 数値 = { 1 5 9 13 442 44 6 21 211 };
  6. qsort(数値、 0 、数値の長さ-1 );
  7. System.out.println(Arrays.toString(num));
  8. }
  9.     
  10. 公共  void qsort( int [] num, int left, int right){
  11. (左<右)の場合{
  12. intパーティション = パーティション(数値、左、右);
  13. qsort(数値、左、パーティション-1 );
  14. qsort(数値、パーティション+ 1 、右);
  15. }
  16. }
  17.     
  18. 公共  intパーティション( int [] num, int左, int右){
  19. intパーティション = num[左];
  20. (左<右) {
  21. while ((num[right]==partition || isMBigerThanN(num,num[right],partition)) && left<right){
  22. 右 - ;
  23. }
  24. swap(数値、左、右);
  25. while ((num[left]==partition || isMBigerThanN(num,partition,num[left])) && left<right){
  26. 左++;
  27. }
  28. swap(数値、左、右);
  29. }
  30.         
  31. 左に戻る;
  32. }
  33.     
  34. 公共  void swap( int [] num, int m, int n){
  35. 数値[m]を整数で割ったもの
  36. num[m] = num[n];
  37. num[n] = 一時;
  38. }
  39.     
  40. 公共 ブール型isMBiggerThanN( int [] num, int m, int n){
  41. 文字列 num1 = String.valueOf(m);
  42. 文字列 num2 = String.valueOf(n);
  43.         
  44. int temp1 = Integer.parseInt(num1+num2);
  45. int temp2 = Integer.parseInt(num2+num1);
  46.         
  47. (temp1>temp2)の場合{
  48. 戻る 真実;
  49. }
  50. それ以外{
  51. 戻る 間違い;
  52. }
  53. }

質問5:

  1. //サブ配列*** と 
  2. @テスト 
  3. 公共  voidテスト(){
  4. int [] num = { 1 ,- 2 , 3 , 10 ,- 4 , 7 , 2 ,- 5 };
  5. //int[] 数値 = {1,-2,3,10,-4,10,2,-5};  
  6. System.out.println(maxSum(num));
  7. }
  8.     
  9. 公共  int最大合計( int [] 数値) {
  10. int 現在の合計 = 0 ;
  11. int curMaxSum = -99999999 ;
  12. int開始 = 0 ;
  13. int終了 = 0 ;
  14.         
  15. ( int i = 0 ; i < num.length; i++) {
  16. (現在の合計<= 0 )の場合{
  17. カーソルの合計 = num[i];
  18. 開始 = i;
  19. }
  20. それ以外{
  21. カーソルの合計 += num[i];
  22. }
  23. (現在の合計値>現在の最大合計値)の場合{
  24. curMaxSum = curSum;
  25. 終了 = i;
  26. }
  27. }
  28. ( int i = 開始; i<=終了; i++) {
  29. System.out.println(num[i]);
  30. }
  31. curMaxSumを返します
  32. }

質問6:

  1. 公共 クラスtestMinStack {
  2. //カスタムスタック、min関数は現在の最小値を取得します 
  3.     
  4. @テスト 
  5. 公共  voidテスト(){
  6. MinStack ms =新しいMinStack();
  7. ms.push( 5 );
  8. System.out.println(ms.min());
  9. ms.push( 6 );
  10. ms.push( 2 );
  11. ms.push( 1 );
  12. System.out.println(ms.min());
  13. ms.pop();
  14. System.out.println(ms.min());
  15. ms.pop();
  16. System.out.println(ms.min());
  17.         
  18. }
  19. }
  20.  
  21. クラスMinStack{
  22. プライベートStack<Integer> minStack =新しいStack<Integer>();
  23. プライベートStack<Integer> スタック =新しいStack<Integer>();
  24.     
  25. 公共 整数ポップ(){
  26. minStack.pop();
  27. stack.pop()を返します
  28. }
  29.     
  30. 公共  voidプッシュ( int num){
  31. minStack.size()<= 0の場合{
  32. minStack.push(数値);
  33. 戻る;
  34. }
  35. 整数 min = minStack.lastElement();
  36. (数値<最小値)の場合{
  37. minStack.push(数値);
  38. }
  39. それ以外{
  40. minStack.push(min);
  41. }
  42. スタックをプッシュします。
  43. }
  44.     
  45. 公共 整数最小値(){
  46. minStack.size()<= 0の場合{
  47. 戻り値- 1 ;
  48. }
  49. minStack.lastElement()を返します
  50. }
  51. }

質問7:

  1. //配列内で半分以上出現する数字を見つける 
  2.     
  3. @テスト 
  4. 公共  voidテスト(){
  5. int [ ] num = { 1、2、2、2、2、2、2、4、2、4、6、4、2、6、8、2、7、7 } ;
  6. System.out.println(moreThanHaft(num));
  7. }
  8.     
  9. 公共  int moreThanHaft( int [] num){
  10. int結果 = - 1 ;
  11. int回 = 0 ;
  12. ( int i = 0 ; i < num.length; i++) {
  13. (回数== 0の場合{
  14. 結果 = num[i];
  15. 回++;
  16. }
  17. それ以外{
  18. if (num[i]==結果){
  19. 回++;
  20. }
  21. それ以外{
  22. 回--;
  23. }
  24. }
  25. }
  26.         
  27. 結果を返します
  28. }

質問8:

  1. //配列が別のスタックのポップ順序であるかどうかを判断します 
  2.     
  3. @テスト 
  4. 公共  voidテスト(){
  5. int [] 数値 = { 1 , 2 , 3 , 4 , 5 };
  6. //int[] num1={1,2,3,5,4};  
  7. int [] num2 = { 2 , 1 , 5 , 3 , 4 };
  8. スタック<Integer> s1 =新しいスタック<Integer>();
  9. スタック s2 =新しいスタック s2();
  10. ( int i = 0 ; i < 5 ; i++) {
  11. s2.push(num2[i]);
  12. }
  13.         
  14. System.out.println(testOrder(num,s1,s2));
  15. }
  16.     
  17. 公共 ブール型テスト順序( int [] num, Stack<Integer> s1, Stack<Integer> s2) {
  18. int長さ = num.length;
  19. ( int i = 0 ; i < 長さ; i++) {
  20. s1.push(num[i]);
  21. int s2Num = s2.lastElement();
  22. s2Num==s1.lastElement().intValue()の場合{
  23. s1.ポップ();
  24. s2.pop();
  25. }
  26. }
  27. while (!s1.isEmpty()){
  28. s1.pop() と s2.pop() が等しい場合{
  29. 戻る 間違い;
  30. }
  31. }
  32. 戻る 真実;
  33. }
  34.  
  35. コードをコピー

質問9:

  1. //ポーカーデッキから5枚のカードを引き、0は任意の数字で、ストレートかどうかを判定します 
  2.     
  3. @テスト 
  4. 公共  voidテスト(){
  5. int [] 数値 = { 0 , 1 , 5 , 3 , 2 };
  6. System.out.println(チェック(num));
  7. }
  8.     
  9. 公共 ブールチェック( int []num){
  10. //0-13  
  11. int [] pai =新しい 整数[ 14 ]
  12. ( int n : 数値)の場合
  13. pai[n]+= 1 ;
  14. }
  15. qsort(数値、 0 、数値の長さ-1 );
  16. 整数カウント = pai[ 0 ];
  17. int開始 = 0 ;
  18. (数値[ 0 ] == 0の場合{
  19. 開始=数値[ 1 ];
  20. }
  21. それ以外{
  22. 開始=数値[ 0 ];
  23. }
  24. ( int i = 開始; i <= 開始 + 5 ; i++) {
  25. (pai[i]> 1 )の場合戻り値 間違い;
  26. カウント += pai[i];
  27. }
  28. (カウント == 5 の場合、戻り値 真実;
  29. それ以外 戻る 間違い;
  30.         
  31. }
  32.     
  33. 公共  void qsort( int [] num, int left, int right){
  34. (左<右)の場合{
  35. intパーティション = パーティション(数値、左、右);
  36. qsort(数値、左、パーティション-1 );
  37. qsort(数値、パーティション+ 1 、右);
  38. }
  39. }
  40.     
  41. 公共  intパーティション( int [] num, int左, int右){
  42. intパーティション = num[左];
  43. (左<右) {
  44. while (left<right && num[right]>=パーティション){
  45. 右 - ;
  46. }
  47. swap(数値、左、右);
  48. while (左<右 && num[左]<=パーティション){
  49. 左++;
  50. }
  51. swap(数値、左、右);
  52. }
  53.         
  54. 左に戻る;
  55. }
  56.     
  57. 公共  void swap( int [] num, int m, int n){
  58. 数値[m]を整数で割ったもの
  59. 数値[m]=数値[n];
  60. num[n] = 一時;
  61. }

質問10:

  1. //k 番目の醜い数を出力します (因数は 2、3、5 のみ)  
  2.     
  3. @テスト 
  4. 公共  void test(){
  5. findUglyNum( 8 );
  6. }
  7.     
  8. 公共  void findUglyNum( intインデックス){
  9. int [] num = new   int [インデックス];
  10. int next = 1 ;
  11. num[ 0 ]= 1 ;
  12. int index2= 0 ;
  13. int index3= 0 ;
  14. int index5= 0 ;
  15.  
  16. while (next<index){
  17. int num2 = num[index2]* 2 ;
  18. int num3 = num[index3]* 3 ;
  19. int num5 = num[index5]* 5 ;
  20.             
  21. num[次] = getSuitable(num2,num3,num5);
  22.             
  23. while (num[index2]* 2 <=num[next]){
  24. index2++;
  25. }
  26. while (num[index3]* 3 <=num[next]){
  27. index3++;
  28. }
  29. while (num[index5]* 5 <=num[next]){
  30. index5++;
  31. }
  32. next++;
  33.             
  34. }
  35. System.out.println(num[index- 1 ]);
  36. }
  37.     
  38. 公共  int getSuitable( int num2, int num3, int num5){
  39. int s = num2;
  40. if (num3<s){
  41. s = num3;
  42. }
  43. if (num5<s){
  44. s = num5;
  45. }
  46. return s;
  47. }
[[137673]]

[[137673]]

<<:  Google のアルゴリズムにどんな恥ずかしいことが起こったのでしょうか?

>>:  Java における 4 つの基本的な暗号化アルゴリズムの分析

ブログ    
ブログ    
ブログ    

推薦する

ザッカーバーグがAlpaca 2をベースにしたChatGPTのMetaバージョンを正式にリリース。Appleに先駆けて初のMRヘッドセットをリリース、価格は1/7以下

ChatGPT ネットワーキング モードが正式に復活しました。そして、この波は有料ユーザーだけでなく...

...

人工知能は防衛システムをどのように変えるのでしょうか?

この記事では、人工知能が防衛システムにどのように革命をもたらし、より安全な未来を実現できるかを探りま...

...

最も人気のあるオープンソースの機械学習 JavaScript フレームワーク 5 つ

[[235929]]機械学習に興味がある、または JavaScript を使用して機械学習の専門家に...

スマート水利建設を加速する必要があり、ドローンが大きな推進力となる

夏の気温が上昇し続け、雨季が近づいているため、我が国の水利インフラは再び大きな試練に直面することにな...

「これまで作られなかった最も重要な機械」アラン・チューリングとチューリングマシン

コンピューティングは、私たちのほとんどが直感的に理解できる馴染みのある概念です。関数 f (x) =...

中国でドローン配送用の商用「操縦免許」が発行されるまでにどれくらいの時間がかかるのでしょうか?

[[264191]]少し前、米国で初となるドローン配送の「操縦免許」が正式に発行された。これを取得...

...

初心者からプロまでが使用する機械学習ソフトウェア トップ 10

この記事では、機械学習に最適なソフトウェアについて説明します。これらのソフトウェアは、ML コードを...

法律分野で初の「1対多」の人間と機械の競争が始まり、AI弁護士が契約書審査で人間を上回る

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

ビッグデータアルゴリズムにもっと積極的な役割を担わせる

近年、ビッグデータコンピューティングの継続的な発展に伴い、ユーザーを中毒に誘導したり、悪いアイデアを...

AIネットワークはこれまで考えられていたよりも攻撃に対して脆弱である

人工知能 (AI) ツールは、自動運転車から医療画像解釈まで、さまざまなアプリケーションで使用される...

青春が戻ってきた! AIが『スラムダンク』の登場人物を実在の人物に変身させたら、一番イケメンは流川楓じゃないのか?

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AIの急速な発展によってもたらされるエネルギー需要をどう解決するか?

生成 AI テクノロジーは、単純なフレーズを驚くほどリアルな画像に変換し、世界中の人々の想像力をかき...