• <Array> 41 134


    41. First Missing Positive

    思路是把1放在数组第一个位置 nums[0],2放在第二个位置 nums[1],即需要把 nums[i] 放在 nums[nums[i] - 1]上,遍历整个数组,如果 nums[i] != i + 1, 而 nums[i] 为整数且不大于n,另外 nums[i] 不等于 nums[nums[i] - 1] 的话,将两者位置调换,如果不满足上述条件直接跳过,最后再遍历一遍数组,如果对应位置上的数不正确则返回正确的数

    class Solution {
        public int firstMissingPositive(int[] nums) {
            int n = nums.length;
            for(int i = 0; i < n; i++){
                while(nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]){
                    swap(nums, nums[i] - 1, i);
                }
            }
            for(int i = 0; i < n; i++){
                if(nums[i] != i + 1) return i + 1;
            }
            return n + 1;
        }
        
        public void swap(int[] a, int i, int j){
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }

    134. Gas Station

    如果当前起点油量小于0,说明从0开始的任何一个点都不能作为起点,此时start + 1。

    最后如果total总油量小于等于0,则说明不满足条件。

    class Solution {
        public int canCompleteCircuit(int[] gas, int[] cost) {
            if(gas == null || cost == null || gas.length == 0 || cost.length == 0) return -1;
            
            int total = 0;
            int cur = 0;
            int start = 0;
            
            for(int i = 0; i < cost.length; i++){
                cur += gas[i] - cost[i];
                
                if(cur < 0){
                    start = i + 1;
                    cur = 0;
                }
                
                total += gas[i] - cost[i];
            }
            return total >= 0 ? start : -1;
        }
    }
  • 相关阅读:
    poj3278 Catch That Cow
    poj2251 Dungeon Master
    poj1321 棋盘问题
    poj3083 Children of the Candy Cor
    jvm基础知识—垃圾回收机制
    jvm基础知识1
    java面试基础必备
    java soket通信总结 bio nio aio的区别和总结
    java scoket aIO 通信
    java scoket Blocking 阻塞IO socket通信四
  • 原文地址:https://www.cnblogs.com/Afei-1123/p/11872209.html
Copyright © 2020-2023  润新知