zoukankan      html  css  js  c++  java
  • JavaSE 第二次学习随笔(作业一)

    package homework2;
    
    import java.io.ObjectInputStream.GetField;
    import java.util.Arrays;
    
    public class HomeWork {
    
    	public static void main(String[] args) {
    		yi();
    		er();
    		san();
    		si();
    	}
    
    	/*
    	 * 题目1 : 两数之和 (简单) 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
    	 * 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
    	 */
    	public static void yi() {
    		int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    		int target = 19;
    		for (int i = 0; i < arr.length - 1; i++) {
    			for (int j = i + 1; j < arr.length; j++) {
    				if (target == arr[i] + arr[j]) {
    					System.out.println(i + ":" + j);
    					return;
    				}
    			}
    		}
    
    		System.out.println("yi");
    	}
    
    	/*
    	 * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
    	 */
    	public static void er() {
    		int[] arr = { 1, 2, 0, 3, 0, 4, 5, 6, 7, 8, 9, 10 };
    		int[] dp = new int[arr.length]; // 记录在 i 之前有多少个 0!!!
    
    		int count = 0;
    		for (int i = 0; i < arr.length; i++) {
    			if (arr[i] == 0)
    				++count;
    			dp[i] = count;
    		}
    		for (int i = 0; i < arr.length; i++) {
    			if (arr[i] != 0) {
    				arr[i - dp[i]] = arr[i];
    			}
    			if (arr.length - i <= count)
    				arr[i] = 0;
    		}
    		System.out.println(Arrays.toString(arr));
    	}
    
    	/*
    	 * 给定一个字符串,逐个翻转字符串中的每个单词。
    	 */
    
    	public static void san() {
    		String str = "the sky is blue ";
    		int count = 1;
    		String s = "";
    		for (int i = str.length() - 1; i > -1; i--, count++) {
    			if (str.charAt(i) == ' ' && i != 0) {
    				String ss = "";
    				for (int j = i + 1; j < i + count; j++) {
    					ss += str.charAt(j);
    				}
    				s = s + ss + ' ';
    				count = 0;
    			}
    			if (i == 0) {
    				String ss = "";
    				for (int j = i; j < i + count; j++) {
    					ss += str.charAt(j);
    				}
    				s = s + ss;
    			}
    		}
    		System.out.println(s);
    	}
    
    	/*
    	 * 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0
    	 * ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。
    	 */
    	public static void si() {
    		int[] arr = { -1, -2, 0, 3, 0, -4, 5, 6, 7, -8, -9, 10 };
    	     //dp 存特征数
             //size 存特征数的个数
             //getValue 计算特征数
    class Data{ int[] dp = new int[arr.length]; int size = 0; public int getValue(int x, int y, int z){ int i = 1; if(x*y*z < 0) i = -1; return x*x * y*y * z*z * i; } public boolean find(int data){ for(int i = 0; i < size; i++){ if (data == dp[i]){ return false; } } dp[size++] = data; return true; } } Data data = new Data(); for (int i = 0; i < arr.length; i++) { ok: for (int j = i+1; j < arr.length; j++) { for (int k = j+1; k < arr.length; k++) { if(arr[i] + arr[j] + arr[k] ==0){ int num = data.getValue(arr[i], arr[j], arr[k]); if(data.find(num)){ System.out.println("[" + arr[i] + ", "+ arr[j] + ", "+ arr[k] + "]"); } break ok; } } } } } }

      对于第四题 一共三个数字 X Y Z 相加得零 他们重复的情况下 : 计算 X² + Y² + Z² ( 1 2 -3  ->> 1 + 4 +  9 = 14),
      i 值  : 两个负数则为 1 一个负数则为 负1 (1 2 -3  ->>  14 * i  ->> -14 , -1 -2 3 ->> 14 * i  ->> 14 这两个就是个例子)

  • 相关阅读:
    set用法
    01分数规划
    unique && stl的全排列
    lower_bound() && upper_bound()
    spfa判负环
    倍增求LCA
    数据生成c++程序模板
    samba
    vsftp快速配置
    grub丢失的修复
  • 原文地址:https://www.cnblogs.com/chinashenkai/p/9428768.html
Copyright © 2011-2022 走看看