日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

米拓世纪初试

發布時間:2024/4/11 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 米拓世纪初试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

米拓世紀初試筆記;

兩道編程題:

給定一個由正數,負數和0組成的整數數組,將所有為0的元素,挪到數組末尾。要求時間復雜度O(n)

解題思路:采用左右指針,同時向中間遍歷,這樣只需要遍歷一遍數組就可以完成

/*** @author chen*/ public class Main {/*** 一個由正數,負數和0組成的整數數組,將所有為0的元素,挪到數組末尾** @param array 整數數組*/public void moveNumber(int[] array) {int left = 0;int right = array.length - 1;while (left < right) {// 從左往右查找一個 0 的元素while (array[left] != 0) {left++;}// 從右往左查找一個非 0 元素while (array[right] == 0) {right--;}if (left < right) {// 交換兩個數array[left] = array[left] ^ array[right];array[right] = array[left] ^ array[right];array[left] = array[left] ^ array[right];}}} }

給定任意一個自然數,獲取它重新排列后,下一個比它大的自然數,要求時間復雜度O(n)。例如:

給定1233,它的下一個是1323;給定1323,它的下一個是1332;給定9876,它的下一個不存在;請設計一個函數,完成此功能。

解題思路:將數字轉換成數組,從右往左查找第一個前一個數字比后一個小的位置,如果存在交換兩個數字,如果不存在就返回-1

/*** @author chen*/ public class Main {/*** 獲取它重新排列后,下一個比它大的自然數,如果不存在則返回-1** @param number 數字* @return 下一個比他大的自然數*/private int nextNumber(int number) {int[] array = numberToArray(number);if (array.length == 1) {return -1;}// 調換位置開始的地方,后一個數比前一個數大int i = -1;boolean flag = false;for (i = array.length - 1; i > 0; i--) {if (array[i] > array[i - 1]) {flag = true;break;}}// 交換位置if (flag) {array[i] = array[i] ^ array[i - 1];array[i - 1] = array[i] ^ array[i - 1];array[i] = array[i] ^ array[i - 1];// 組合數字int sum = 0;for (int value : array) {sum = sum * 10 + value;}return sum;}return -1;}/*** 將一個數字轉換成數組** @param number 數字——數字為自然數* @return 數字數組*/private int[] numberToArray(int number) {if (number == 0) {return new int[1];}int[] temp = new int[100];int index = 0;while (number > 0) {int t = number % 10;temp[index++] = t;number /= 10;}System.out.println(index);int[] array = new int[index];for (int i = 0, j = index - 1; i < index; i++, j--) {array[i] = temp[j];}return array;} }

總結

以上是生活随笔為你收集整理的米拓世纪初试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。