两个数组的交集
public static int[] intersect(int[] nums1, int[] nums2) {
int len = nums1.length;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(len);
for (int i = 0; i < len; i++) {
if(map.containsKey(nums1[i])) {
map.replace(nums1[i], map.get(nums1[i])+1);
continue;
}
map.put(nums1[i], 1);
}
List<Integer> list =new ArrayList<Integer>(map.size());
len = nums2.length;
for (int i = 0; i < len; i++) {
if(map.containsKey(nums2[i])) {
list.add(nums2[i]);
if( map.get(nums2[i]) == 1) {
map.remove(nums2[i]);
continue;
}
map.replace(nums2[i], map.get(nums2[i]) -1 );
}
}
len = list.size();
int[] ret = new int[len];
for (int i = 0; i < len; i++) {
ret[i] = list.get(i);
}
return ret;
}
两数之和
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(nums[0], 0);
int len = nums.length;
int j=0;
for (int i = 1; i < len; i++) {
j=target-nums[i];
if(map.containsKey(j)) {
return new int[] {map.get(j),i};
}
if(map.containsKey(nums[i])) {
continue;
}
map.put(nums[i], i);
}
return null;
}
加一
public static int[] plusOne(int[] digits) {
int len = digits.length;
for (int i = len-1; i >= 0; i--) {
if(digits[i] == 9) {
digits[i] = 0;
continue;
}
digits[i] += 1;
return digits;
}
digits = new int[len+1];
digits[0] = 1;
return digits;
}
移动零
public static void moveZeroes(int[] nums) {
int index = 0;
int len = nums.length;
for (int i = 0; i < len; i++) {
if(nums[i] != 0) {
nums[index++] = nums[i];
}
}
while(index < len) {
nums[index++] = 0;
}
}
有效的数独
public static boolean isValidSudoku(char board[][]) {
int len = board.length;
boolean[][] rows = new boolean[len][len];
boolean[][] lists = new boolean[len][len];
boolean[][] areas = new boolean[len][len];
int num = 0;
int area = 0;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
if( board[i][j] == '.' ) {
continue;
}
num = board[i][j] - '0' -1;
area = i/3*3+j/3;
if(rows[i][num] || lists[j][num] || areas[area][num] ) {
return false;
}
rows[i][num] = lists[j][num] = areas[area][num] = true;
}
}
return true;
}