Shrinking Number Line

Paste_Image.png
import java.util.ArrayList;
import java.util.List;

public class ShrinkingNumberLine4 {
    public static int minimize(int[] point, int k) {
        if (point == null || point.length == 0) {
            return -1;
        }

        int incre = dfs(point, k, 1, point[0]+k, point[0]+k);
        int decre = dfs(point, k, 1, point[0]-k, point[0]-k);
        
        return Math.min(incre, decre);
    }
    
    public static int dfs(int[] point, int k, int idx, int min, int max) {
        if (idx >= point.length) {
            return max - min;
        }
        
        int min_incre = Math.min(min, point[idx] + k);
        int max_incre = Math.max(max, point[idx] + k);
        int incre = dfs(point, k, idx + 1, min_incre, max_incre);
        
        int min_decre = Math.min(min, point[idx] - k);
        int max_decre = Math.max(max, point[idx] - k);
        int decre = dfs(point, k, idx + 1, min_decre, max_decre);
        
        return Math.min(incre, decre);
    }
    
    public static int minimize2(int[] point, int k) {
        if (point == null || point.length == 0) {
            return -1;
        }
        List<Integer> list = new ArrayList<>();
        return dfs2(point, k, 0, list);
    }
    
    public static int dfs2(int[] point, int k, int idx, List<Integer> list) {
        if (idx >= point.length) {
            int min = Integer.MAX_VALUE;
            int max = Integer.MIN_VALUE;
            for (int i = 0; i < list.size(); i++) {
                min = Math.min(min, list.get(i));
                max = Math.max(max, list.get(i));
            }
            //System.out.println(list.toString());
            return max - min;
        }
        
        list.add(point[idx] + k);
        int incre = dfs2(point, k, idx + 1, list);
        list.remove(list.size() - 1);
        
        list.add(point[idx] - k);
        int decre = dfs2(point, k, idx + 1, list);
        list.remove(list.size() - 1);
        
        return Math.min(incre, decre);
    }
    
    public static void main(String[] args) {
        
        System.out.println(minimize(new int[]{-3, 0, 1}, 3)); //3
        System.out.println(minimize2(new int[]{-3, 0, 1}, 3)); //3
        
        System.out.println(minimize(new int[]{4, 7, -7}, 5)); //4
        System.out.println(minimize2(new int[]{4, 7, -7}, 5)); //4
        
        System.out.println(minimize(new int[]{-100000, 100000}, 100000)); //0
        System.out.println(minimize2(new int[]{-100000, 100000}, 100000)); //0
        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容