DAY28-贪心

LeetCode122.买卖股票的最佳时机II

    public int maxProfit(int[] prices) {
    	int buy=-1;
    	int sub=0,max=0;
    	for(int i=0;i<prices.length-1;i++) {
    		if(prices[i]>prices[i+1]) {
    			//第二次遇到山峰,记录前一次的值
    			if(buy!=-1) {
    				max=max+sub;
    				buy=-1;
    				sub=0;
    			}
    			buy=prices[i+1];
    		}else if(prices[i]<=prices[i+1]) {
    			if(buy!=-1) {
    				sub=prices[i+1]-buy;
    			}
    			if(i==0) {
    				buy=prices[i];
    				sub=prices[i+1]-buy;
    			}
    		}
    	}
    	if(sub!=0) {
    		max=max+sub;
    	}
    	return max;
    }

LeetCode55. 跳跃游戏

    public boolean canJump(int[] nums) {
        int maxReach = 0; // 当前能到达的最远位置

        for (int i = 0; i < nums.length; i++) {
            if (i > maxReach) {
                return false; // 如果当前位置超过了当前能到达的最远位置,则不能到达最后一个位置
            }
            maxReach = Math.max(maxReach, i + nums[i]); // 更新能到达的最远位置
            if (maxReach >= nums.length - 1) {
                return true; // 如果能到达或超过最后一个位置,返回true
            }
        }
        return false; // 如果遍历完数组都没有到达最后一个位置,返回false
    }

LeetCode45.跳跃游戏II

    public int jump(int[] nums) {
        int end = 0;
        int maxPosition = 0; 
        int steps = 0;
        for (int i = 0; i < nums.length - 1; i++) {
            maxPosition = Math.max(maxPosition, i + nums[i]); 
            if (i == end) {
                end = maxPosition;
                steps++;
            }
        }
        return steps;
    }

LeetCode1005.K次取反后最大化的数组和

    public int largestSumAfterKNegations(int[] nums, int k) {
    	//清除负数
    	Arrays.sort(nums);
    	int i=0;
    	while(i<nums.length&&k>0) {
    		if(nums[i]<0) {
    			nums[i]=-nums[i];
    			i++;
    			k--;
    		}else{
    			break;
    		}
    	}
    	
    	//如果k不为0则继续翻转
    	Arrays.sort(nums);
    	while(k>0) {
    		nums[0]=-nums[0];
    		k--;
    	}
    	int sum=0;
    	for(int q=0;i<nums.length;i++) {
    		sum+=nums[q];
    	}
    	return sum;
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以在load_schedule函数中对事件按照时间先后进行排序,然后再进行输出。具体实现可以使用冒泡排序、快速排序、归并排序等排序算法,以下是使用冒泡排序实现的代码示例: ``` void load_schedule(Node* head) { // 加载日程 // ... // 对事件按照时间先后进行排序 int len = get_length(head); Node* p = head->next; for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - i - 1; j++) { if (compare_time(p->event, p->next->event) > 0) { Event temp = p->event; p->event = p->next->event; p->next->event = temp; } p = p->next; } p = head->next; } } int compare_time(Event event1, Event event2) { // 比较两个事件的时间先后 if (event1.year != event2.year) { return event1.year - event2.year; } else if (event1.month != event2.month) { return event1.month - event2.month; } else if (event1.day != event2.day) { return event1.day - event2.day; } else if (event1.hour != event2.hour) { return event1.hour - event2.hour; } else { return event1.minute - event2.minute; } } void print_schedule(Node* head) { load_schedule(head); Node* move = head->next; while (move != NULL) { printf("日期:%d-%d-%d 时间:%02d:%02d 事件:%s\n", move->event.year, move->event.month, move->event.day, move->event.hour, move->event.minute, move->event.name); move = move->next; } system("pause"); system("cls"); } ``` 其中,compare_time函数用于比较两个事件的时间先后,返回值为正数表示event1在event2之后,返回值为负数表示event1在event2之前,返回值为0表示两个事件同时发生。在load_schedule函数中,使用冒泡排序对事件进行排序,然后再进行输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值