912. 排序数组
class Solution {
public int[] sortArray(int[] nums) {
Arrays.sort(nums);
return nums;
}
}
class Solution {
public int[] sortArray(int[] nums) {
//qSort(nums,0,nums.length-1); 快速排序 执行用时 : 5 ms 内存消耗 : 47.3 MB
//selectSort(nums); 选择排序 执行用时 : 2097 ms 内存消耗 : 47.4 MB
//insertSort(nums); 插入排序 执行用时 : 748 ms 内存消耗 : 47.7 MB
return nums;
}
/*快速排序*/
void qSort(int[] arr,int left,int right){
int l=left,r=right;
if(l<r){
int temp = arr[l];
while(l<r){
while(l<r && arr[r] >= temp) r--;
if(l<r) arr[l] = arr[r];
while(l<r && arr[l] < temp) l++;
if(l<r) arr[r] = arr[l];
}
arr[l] = temp;
qSort(arr,left,l);
qSort(arr,l+1,right);
}
}
/*选择排序*/
void selectSort(int[] arr){
int min;
for(int i=0;i<arr.length;i++){
min = i;
for(int j=i;j<arr.length;j++){
if(arr[j]<arr[min]){
min = j;
}
}
if(min != i){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
/*插入排序*/
void insertSort(int arr[]){
for(int i=1;i<arr.length;i++){
int res = arr[i];
for(int j=i-1;j>=0;j--){
if(res<arr[j]){
arr[j+1] =arr[j];
arr[j] = res;
}else{
break;
}
}
}
}
}
面试题53 - I. 在排序数组中查找数字 I
class Solution {
public int search(int[] nums, int target) {
int count = 0;
for(int i=0;i<nums.length;i++){
if(target==nums[i]){
count++;
}
if(target<nums[i]){
break;
}
}
return count;
}
}
class Solution {
public int search(int[] nums, int target) {
int l=0,r=nums.length-1;
int count=0;
while(l<r){
int mid = (l+r)/2;
if(nums[mid]>=target){
r = mid;
}
if(nums[mid]<target){
l = mid+1;
}
}
while(l<nums.length&&nums[l++]==target){
count++;
}
return count;
}
}
面试题53 - II. 0~n-1中缺失的数字
class Solution {
public int missingNumber(int[] nums) {
for(int i=0;i<nums.length;i++){
if(nums[i]!=i){
return i;
}
}
return nums.length;
}
}
//位运算
class Solution {
public int missingNumber(int[] nums) {
int n = nums.length;
for(int i=0;i<nums.length;i++){
n ^= nums[i];
n ^= i;
}
return n;
}
}
//二分
class Solution {
public int missingNumber(int[] nums) {
int l = 0,r = nums.length-1;
while(l<=r){
int mid = (l+r)/2;
if(nums[mid]==mid){
l = mid+1;
}else{
r = mid-1;
}
}
return l;
}
}
//等差数列求和 Sn=n(a1+an)/2
class Solution {
public int missingNumber(int[] nums) {
int sum = 0,Sn = 0;
int n = nums.length;
for(int i=0;i<n;i++){
sum += nums[i];
}
Sn = n*(1+n)/2;
return Sn-sum;
}
}
你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步