算法设计分析总结------更新中(自用)

本文总结了算法设计中的分治法、动态规划和贪心策略。通过多数元素问题解释分治法,利用斐波那契数、不同路径、最长递增子序列和01背包问题探讨动态规划,最后讨论了完全背包问题的贪心算法解决思路。
摘要由CSDN通过智能技术生成

算法设计分析----搞定考研代码题[部分院校]具体看自己院校考纲----目标院校考察只需要掌握这3种算法思想应该就可以搞定算法题

1.绪论-----渐进符号理解

五种渐进符号理解

定义太冗长,直接记通俗理解就行-------(O为上界,阶数越小越精确,Ω为下界,阶数越大越精确)。

1.分治法(例子:多数元素)

先分治,再合并;
向下分治,递归(终止条件:分解到最小情况未知,分不动了)

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:nums = [3,2,3]
输出:3
示例 2
输入:nums = [2,2,1,1,1,2,2]
输出:2
	//伪代码
	func(nums)->int:
	return getMajority(nums,0,nums.length-1)
	if left == right :
		return nums[left]
	mid = left + (right-left)/2
	leftMajority = getMajority(nums,left,mid)
	rightMajority = getMajority(nums,mid+1,right)
	if leftMajority == rightMajority :
		return leftMajority
	leftCount =0
	rightCount =0
	for i in nums[left,night]
		if i == leftMajority:
			leftCount++
		else if i == rightMajority:
			rightCount++
	if leftCount > rightCount:
		return leftMajority
	else  :
		return rightMajority

源码部分

int majorityElement(int nums[],int numSize) {
   
    return findMajorElenment(nums,0,numSize-1);
}
findMajorElenment(int nums[],int low,int high){
   
    if(low == high){
   
        return nums[low];
    }
    int mid = (high-low)/2 + low;
    int left = findMajorElenment(nums,low,mid);
    int right = findMajorElenment(nums,mid+1,high);
    if(left == right){
   
        return left;
    }
    int leftCount = findMajorCount(nums,left,low,mid);
    int rightCount = findMajorCount(nums,right,mid+1,high);
    return (leftCount>rightCount)?l
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值