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 };
		
		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;
					}
				}
			}
		}

	}
}

  

猜你喜欢

转载自www.cnblogs.com/chinashenkai/p/9428768.html