leetcode算法(一)

本文探讨了算法的时间复杂度评估标准,介绍了如何忽略常数项并关注最高次幂。讲解了交换操作的巧妙实现,并提出了递归的Master公式。接着,详细阐述了归并排序在解决小和问题上的应用,以及归并排序的效率。最后,讨论了快速排序的荷兰国旗问题及其优化,展示了从O(N^2)到O(N*log2N)的改进过程。
摘要由CSDN通过智能技术生成

leetcode算法(一)时间复杂度

1.时间复杂度:忽略所有常数项,取最高次。
eg: aN2+bN +c
时间复杂度为O(n2)

2.评价一个算法的好坏
先看时间复杂度,然后在分析不同数据样本下的实际运行时间,也就是“常数项时间”

3.交换另一种写法
#在数组中当i!=j的时候可以这样,必须要i j指向不同的内存空间
swap(arr, i , j):
arr[i] = arr[i] ^ arr[j]
arr[j] = arr[i] ^ arr[j]
arr[i] = arr[i] ^ arr[j]

4. 递归master公式
T(N) = a*T(N/b) + O(N^d)
1)logba < d — O(Nd)
2)logba < d — O(Nlog~b~a)
3)logba < d — O(Nd*logN)
在这里插入图片描述

在这里插入图片描述
5.归并排序(小和问题)
小和问题:在一个数组中, 每一个数左边比当前数小的数累加起来, 叫做这个数组的小和。 求一个数组的小和。

package mergeSort;
 
public class smallSum {
 
	public static int samllSum(int[] arr) {
		if (arr == null||arr.length<2) {
			return 0 ;
		}
		return mergeSort(arr,0,arr.length-1);
	}
	public static int mergeSort(int[] arr,int L,int R) {
		if (L == R) {
			return 0;
		}
		int m=L+((R-L)>>1);
		return mergeSort(arr,L,m)+
				mergeSort(arr,m+1,R)+
				merge(arr, L,m,R);
	}
	public static int merge(int[] arr, int l, int m,int r) {
		//help用来存放临时数据
		int[] help=new int[r-l+1];
		int count=0;
		int index1=l;
		int index2=m+1;
		int i=0;
		while (index1<=m&&index2<=r) {
			count+=(arr[index1]<arr[index2])?
					(arr[index1])*(r-index2+1):0;
            help[i++]=(arr[index1]<arr[index2])
            		?arr[index1++]:arr[index2++];
		}
		while (index1<=m) {
			help[i++]=arr[index1++];
		}		
		while (index2<=r) {
			help[i++]=arr[index2++];
		}
		
		for (i = 0; i < help.length; i++) {
			arr[l + i] = help[i];
		}
		return count;
	}
	
	public static void main(String[] args) {
		int[] a= {1,3,4,2,5};
		System.out.println(samllSum(a));
	}
 
}

6.快速排序(荷兰国旗问题)
**荷兰国旗问题:**无需列表,分成3个部分,小于i,等于i,大于i
快排1.0: 总拿最后一个数做分部,不停递归 O(N2)
快排2.0: 增加了一个=区域 O(N2)
快排3.0: 随机选择一个数做划分 O(N*log2N)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值