1365. 有多少小于当前数字的数字
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
以数组形式返回答案。
示例 1:
输入:nums = [8,1,2,2,3]
输出:[4,0,1,1,3]
解释:
对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。
对于 nums[1]=1 不存在比它小的数字。
对于 nums[2]=2 存在一个比它小的数字:(1)。
对于 nums[3]=2 存在一个比它小的数字:(1)。
对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。
示例 2:
输入:nums = [6,5,4,8]
输出:[2,1,0,3]
示例 3:
输入:nums = [7,7,7,7]
输出:[0,0,0,0]
public static int[] smallerNumbersThanCurrent(int[] nums) {
int [] bin =new int [101];
int [] smaller =new int [nums.length];
for (int num : nums) {
bin[num]++;
}
int temp=bin[0],p;
for (int i = 1; i < 101; i++) {
p=bin[i];
bin[i]=temp;
temp=temp+p;
}
for (int i = 0; i < nums.length; i++) {
smaller[i] = nums[i]==0 ? 0 : bin[nums[i]];
}
return smaller;
}
35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0
class Solution {
public static int searchInsert(int[] nums, int target) {
int left=0,right= nums.length,mid;
if (target<=nums[0]) return 0;
if (target>nums[nums.length-1]) return nums.length;
while (left + 1 != right){
mid=(left+right)/2;
// System.out.println(left +" " +right+" "+ nums[mid]+" "+mid);
if (nums[mid]>target){
right = mid;
}else if(nums[mid]<target){
left = mid;
}else{
return mid;
}
}
return right;
}
}
36. 有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
上图是一个部分填充的有效的数独。
数独部分空格内已填入了数字,空白格用 ‘.’ 表示。
示例 1:
class Solution {
public static boolean isValidSudoku(char[][] board) {
int [] bin = new int[10];
Integer num = null;
for (int i = 0; i < 9; i++) {
Arrays.fill(bin,0);
for (int j = 0; j < 9; j++) {
if (board[i][j] != '.') {
num=Integer.parseInt(String.valueOf(board[i][j]));
if (bin[num]!=0) return false; else bin[num]++;
}
}
Arrays.fill(bin,0);
for (int j = 0; j < 9; j++) {
if (board[j][i] != '.') {
num = Integer.parseInt(String.valueOf(board[j][i]));
if (bin[num] != 0) return false;
else bin[num]++;
}
}
Arrays.fill(bin,0);
int left=( i % 3 ) * 3,right=( i / 3 ) * 3;
for (int i1 = 0; i1 < 3; i1++) {
for (int j1 = 0; j1< 3; ++j1) {
if (board[left+i1][right+j1] != '.') {
num = Integer.parseInt(String.valueOf(board[left + i1][right + j1]));
if (bin[num] != 0) return false;
else bin[num]++;
}
}
}
}
return true;
}
}